🇰🇷 한글 설명
WWBN AVideo 29.0 이하 버전의 objects/getCaptcha.php는 쿼리 문자열의 CAPTCHA 길이(ql) 값을 검증 없이 받아들여, 비인증 사용자가 1자리 CAPTCHA를 강제로 생성하게 할 수 있습니다. 대소문자를 구분하지 않는 비교(strcasecmp)와 실패 시 세션 토큰이 소모되지 않는 점이 결합되어 회원가입, 비밀번호 찾기 등 Captcha::validation()을 사용하는 엔드포인트의 CAPTCHA가 약 33회 요청 내에 무차별 대입으로 우회될 수 있습니다.
💡 쉬운 설명
보안 확인 문자(CAPTCHA)를 아주 짧게 만들어서 누구나 쉽게 맞출 수 있게 되는 취약점입니다. 이로 인해 자동화된 프로그램이 회원가입이나 비밀번호 찾기 같은 기능을 대량으로 악용할 수 있습니다.
🇺🇸 원문 (English)
WWBN AVideo is an open source video platform. In versions 29.0 and prior, `objects/getCaptcha.php` accepts the CAPTCHA length (`ql`) directly from the query string with no clamping or sanitization, letting any unauthenticated client force the server to generate a 1-character CAPTCHA word. Combined with a case-insensitive `strcasecmp` comparison over a ~33-character alphabet and the fact that failed validations do NOT consume the stored session token, an attacker can trivially brute-force the CAPTCHA on any endpoint that relies on `Captcha::validation()` (user registration, password recovery, contact form, etc.) in at most ~33 requests per session. Commit bf1c76989e6a9054be4f0eb009d68f0f2464b453 contains a fix.
📍 영향받는 시스템
WWBN AVideo 29.0 이하 버전 (수정 커밋 bf1c76989e6a9054be4f0eb009d68f0f2464b453 적용 필요)
⚔️ 공격 벡터
비인증 공격자가 ql 파라미터로 1자리 CAPTCHA를 생성시킨 뒤 약 33개 후보를 대소문자 무관하게 반복 입력해 검증을 우회
🛡️ 대응 방법
AVideo를 29.0 이후의 수정된 버전으로 업그레이드하거나 커밋 bf1c76989e6a9054be4f0eb009d68f0f2464b453을 적용하고, ql 값의 범위 제한 및 실패 시 토큰 무효화를 확인
🔧 검증 코드
ql 값에 최소/최대 범위 제한(clamp, min/max 등)이 있으면 수정된 것이고, 제한 없이 그대로 사용되면 취약한 상태입니다.
grep -rn "ql" objects/getCaptcha.php 2>/dev/null | head -5