
# CVE-2026-73309 개념 증명 및 기술 문서 XenForo 2.3.13 이전 버전의 OAuth2 인증 우회 취약점에 대한 개념 증명(PoC) 및 기술 문서입니다. Python 스크립트를 통해 빈 클라이언트 시크릿(client-secret)과 PKCE 검증 우회를 시연합니다.
XenForo 2.3.13 이전 버전은 빈 문자열이 토큰 엔드포인트에 도달할 때 OAuth2 클라이언트 시크릿 및 PKCE 검증을 건너뛸 수 있습니다.
엔드포인트는 client_secret 및 code_verifier 키가 존재하는지 확인한 후, 해당 PHP 문자열 값이 truthy인 경우에만 비교를 수행합니다. 따라서 빈 값은 존재 여부 확인은 통과하지만 비교는 우회하게 됩니다.
공개 OAuth 클라이언트의 경우, 공격자는 여전히 유효한 인가 코드가 필요합니다. 이 버그는 코드만으로는 충분하지 않다는 PKCE 보장을 제거합니다. 즉, 코드는 검증자(verifier) 없이도 교환될 수 있으며, 사용자가 승인한 범위의 토큰이 생성됩니다. 동일한 falsey 값 패턴이 기밀 클라이언트(confidential-client) 검사에도 영향을 미쳤습니다.
저는 승인된 로컬 설치 환경의 XenForo 2.3.12(빌드 2031270)에서 이 문제를 재현했습니다. XenForo 2.3.13에는 이 수정 사항이 포함되어 있습니다.
이 스크립트는 빈 code_verifier로 토큰 교환을 한 번 수행하고, 반환된 액세스 토큰을 해시한 후 인증 여부를 확인합니다. 토큰이나 계정 신원은 절대 출력하지 않습니다.
python poc.py https://xenforo.example CLIENT_ID AUTHORIZATION_CODE https://client.example/callback
취약한 설치 환경에서는 토큰 엔드포인트가 HTTP 200을 반환하고 /api/me에서 인증된 응답을 반환합니다. 수정된 설치 환경에서는 교환을 거부합니다.
테스트 권한이 있는 시스템에서 일회용 계정으로 생성된 인가 코드만 사용하십시오.
발견자: Marco Paciaroni (BomboBombone).