
CVE-2026-18963에 대한 개념 증명(PoC) 익스플로잇으로, Keycloak의 비밀번호 찾기 흐름에서 적절한 검증 없이 비밀번호 재설정을 허용하는 인증 우회 취약점입니다. 비파괴적 증명 모드를 포함합니다.
CVE-2026-18963에 대한 Proof of Concept입니다. 이는 Keycloak의 "비밀번호 찾기" / 자격 증명 선택 흐름에서 발견된 결함으로, 공격자가 필요한 신원 확인(예: 유효한 OTP/2차 인증)을 제대로 완료하지 않고도 UPDATE_PASSWORD 단계에 도달하여 대상 계정의 비밀번호를 재설정할 수 있게 합니다.
이 스크립트는 (브라우저/Selenium 없이) 순수 HTTP만으로 흐름을 진행하며, 다음과 같은 방식으로 동작합니다:
tryAnotherWay를 트리거합니다.startSessionPolling() 재시작 URL을 추출하고 재전송합니다.UPDATE_PASSWORD로 진행시킵니다.이 도구는 승인된 보안 테스트 및 연구 목적으로만 제공됩니다(수행이 의뢰된 침투 테스트, CTF, 자체 실습 환경, 또는 조율된 취약점 공개). 소유하고 있지 않거나 명시적인 서면 승인 없이 테스트할 권한이 없는 시스템에 대해 이 도구를 실행하는 것은 불법입니다. 작성자와 기여자는 이 도구의 오용 또는 이로 인한 손해에 대해 책임을 지지 않습니다.
문제를 입증하는 데 충분한 경우, --stop-at-update-password를 사용하여 비파괴적 증명(새 비밀번호를 제출하지 않고 에 도달)을 생성하세요.
UPDATE_PASSWORDrequestsbeautifulsoup4git clone <this-repo-url>
cd POC
python -m venv .venv
source .venv/bin/activate # on Windows: .venv\Scripts\activate
pip install -r requirements.txt
python poc_cve_2026_18963_terminal.py \
--base-url http://localhost:8080 \
--realm master \
--client-id account \
--username admin \
--new-password "NewPassword123!"
| 플래그 | 기본값 | 설명 |
|---|---|---|
--base-url | http://localhost:8080 | 대상 Keycloak 인스턴스의 기본 URL |
--realm | master | 대상 영역(realm) |
--client-id | account | 로그인 흐름을 시작하는 데 사용되는 OIDC 클라이언트 ID |
--username | admin | 대상 사용자 이름 |
--new-password | (required) | 대상 계정에 설정할 비밀번호 |
--stop-at-update-password | off | UPDATE_PASSWORD에 도달하면 새 비밀번호를 제출하지 않고 중지합니다(비공격형 증명) |
--timeout | 10.0 | HTTP 요청 시간 제한(초) |
--output-dir | debug_http | 디버깅을 위해 각 중간 HTML 응답이 저장되는 디렉터리 |
--insecure | off | TLS 인증서 검증 비활성화 |
python poc_cve_2026_18963_terminal.py \
--base-url https://target.example.com \
--realm myrealm \
--username victim \
--new-password unused \
--stop-at-update-password
모든 중간 HTTP 응답은 --output-dir(기본값 debug_http)의 01_login.html, 02_reset.html, ... 파일로 저장되어 오프라인에서 검토할 수 있습니다. 스크립트는 성공 시 0, 실패 시 1로 종료되며 진행 상황 및 진단 메시지를 stdout으로 출력합니다.
Aurélien LOIE