better-auth 1.6.11 이전 버전의 oidcProvider와 mcp 플러그인에 CVSS 4.0 기준 9.4(Critical) 등급의 암호화 기본값 취약점이 발견되었다. discovery 메타데이터가 none 알고리즘을 광고하고 PKCE plain을 기본값으로 허용하여, 신뢰할 수 없는 토큰 수용과 인가 코드 탈취가 가능하다.
위협 요약
| 항목 | 내용 |
|---|---|
| CVE | CVE-2026-67336 |
| CVSS 4.0 | 9.4 Critical |
| CVSS 벡터 | CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N |
| CWE | CWE-327 |
| 영향 버전 | better-auth < 1.6.11 |
| 수정 버전 | 1.6.11 |
| 영향 구성 요소 | oidcProvider, mcp |
| GHSA | GHSA-9h47-pqcx-hjr4 |
AC:H/AT:P는 "oidcProvider/mcp가 활성화된 특정 OIDC 설정"이라는 전제 조건이 필요함을 의미한다. @better-auth/oauth-provider는 영향 받지 않는다.
취약점 개요
oidcProvider와 mcp 플러그인은 discovery 메타데이터에 none 알고리즘을 포함하는 것과 PKCE plain을 기본값으로 허용하는 두 가지 결함이 있다.
첫째, discovery 문서의 id_token_signing_alg_values_supported에 none을 포함하면, 알고리즘 고정(pinning) 없이 discovery 문서에서 알고리즘을 선택하는 RP는 서명 없는 토큰을 수락할 수 있다.
둘째, PKCE plain이 기본값으로 활성화되어 있고, code_challenge_method가 누락된 요청은 plain으로 silently downgrade된다. discovery는 S256만 광고하므로 이는 RFC 9700 §2.1.1과도 배치된다.
mcp 플러그인은 oidcProvider를 내부적으로 사용하므로 두 결함을 모두 상속한다.
기술적 분석
metadata 빌더가 none 알고리즘을 무조건 추가하고, authorize 핸들러가 code_challenge_method 누락 시 plain으로 덮어쓰는 구조다. RP가 서명 알고리즘을 고정하지 않으면, 공격자가 none 알고리즘으로 토큰을 조작해 RP가 이를 유효한 것으로 처리할 수 있다.
PKCE plain의 경우, 인가 코드 전달에 해시 검증을 제공하지 않으므로 URL이 누출(Referer, 브라우저 히스토리, 프록시 로그)될 시 인가 코드를 가로챌 수 있다. RFC 9700(OAuth 2.1)은 plain을 명시적으로 금지하며 S256을 필수로 요구한다.
@mcp 플러그인은 agent-to-agent 통신에서 OIDC를 사용할 때 특히 위험하며, 신뢰망이 넓을수록 공격 표면이 증가한다.
@better-auth/oauth-provider는 두 결함이 없다. metadata 빌더가 none을 구조적으로 제외하고 authorize schema가 S256.literal로 plain을 파싱 시점부터 거부한다.
영향 범위
oidcProvider() 또는 mcp()를 활성화한 better-auth 인스턴스가 직접 영향 받는다. 영향 대상:
- SSO 연동 시스템 — better-auth를 OIDC 제공자로 사용하는 RP들이 서명 없는 토큰을 수락할 수 있음. 신원 위조, 권한 승격, 세션 하이징 가능.
- MCP 플러그인 사용 환경 — agent-to-agent 신뢰망에서 토큰 조작과 인가 코드 탈취 경로 존재.
- OAuth 2.1 준수 필요 환경 — RFC 9700 비준수로 규정 준수 리스크 발생.
- @better-auth/oauth-provider — 무영향.
대응 방안
즉시 (0~24시간)
- 업데이트 — better-auth 1.6.11 이상으로 업그레이드
- 워크어라운드 — oidcProvider({ allowPlainCodeChallengeMethod: false }) 적용 및 discovery metadata에서 none 알고리즘 제거
- 마이그레이션 — 가능하면 @better-auth/oauth-provider로 전환
- RP 검증 — RP가 서명 알고리즘을 고정하는지 확인
단기 (1주 이내)
- discovery endpoint의 알고리즘 목록과 PKCE 설정 검증
- OIDC 로그에서 none 토큰 수용, plain PKCE 사용 사례 탐지
- WAF/리버스 프록시에서 none 알고리즘 토큰 거부 규칙 적용
중기 (1개월 이내)
- oauth-provider로의 완전 마이그레이션
- OAuth 2.1(RFC 9700) 준수 검토
- 알고리즘 pinning 정책 도입 및 모니터링
참고문헌
-
NVD — CVE-2026-67336
https://nvd.nist.gov/vuln/detail/CVE-2026-67336 -
GitHub Security Advisory — GHSA-9h47-pqcx-hjr4
https://github.com/better-auth/better-auth/security/advisories/GHSA-9h47-pqcx-hjr4 -
VulnCheck Advisory
https://www.vulncheck.com/advisories/better-auth-before-insecure-cryptographic-defaults-via-oidcprovider -
GitHub Release v1.6.11
https://github.com/better-auth/better-auth/releases/tag/v1.6.11 -
Patch PR #9575
https://github.com/better-auth/better-auth/pull/9575 -
RFC 9700 (OAuth 2.1) §2.1.1 PKCE
https://datatracker.ietf.org/doc/html/rfc9700#section-2.1.1 -
CWE-327 — Use of a Broken or Risky Cryptographic Algorithm
https://cwe.mitre.org/data/definitions/327.html
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!