
이 저장소에는 CVE-2026-29145를 테스트하기 위해 설계된 개념 증명(PoC) 환경이 포함되어 있습니다.
이 저장소는 CVE-2026-29145를 테스트하기 위해 설계된 개념 증명(PoC) 환경을 포함합니다.
이 취약점은 Apache Tomcat의 상호 TLS(CLIENT_CERT) 구현에서의 인증 우회입니다. OCSP(온라인 인증서 상태 프로토콜)가 소프트 실패(soft-fail) 비활성화로 구성된 경우, Tomcat은 OCSP 확인 실패를 하드 거부(hard denial)로 처리하지 못할 수 있습니다. 이로 인해 OCSP 응답자가 연결 불가능하거나 오류를 반환하면 잠재적으로 폐기되었거나 검증되지 않은 인증서를 가진 클라이언트가 인증을 우회할 수 있습니다.
| 속성 | 값 |
|---|
| CVE ID | CVE-2026-29145 |
| CVSS 점수 | 9.1 (치명적) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| 공격 벡터 | 네트워크 |
| 필요 권한 | 없음 |
| 영향 | 인증 우회 |
.ps1 스크립트 사용 시run_test.sh 스크립트는 정리, 인증서 생성, 모든 테스트 시나리오(취약, 성공, 패치) 실행 등 전체 프로세스를 자동화합니다.
# 프로젝트 디렉토리로 이동
cd CVE-2026-29145-Tester
# 스크립트 실행 권한 부여
chmod +x cleanup.sh setup_certs.sh run_test.sh
# Python 종속성 설치 (poc_exploit.py에 필요한 경우)
pip install -r requirements.txt
# 전체 테스트 스위트 실행
./run_test.sh
Linux/macOS:
./setup_certs.sh
Windows (PowerShell):
.\setup_certs.ps1
이 작업이 수행하는 것:
http://localhost:8888을 가리키는 OCSP 확장이 포함된 클라이언트 인증서 생성예상 출력:
[INFO] CVE-2026-29145 테스트 환경용 인증서 생성 시작
[INFO] OpenSSL 발견: OpenSSL 3.0.x (...)
[INFO] certs 디렉토리 생성됨
[INFO] 루트 CA 생성 중...
[INFO] 서버 인증서 생성 중...
[INFO] OCSP 확장이 포함된 클라이언트 인증서 생성 중...
[INFO] 인증서 설정이 성공적으로 완료되었습니다!
docker-compose up -d
이 작업이 수행하는 것:
컨테이너 실행 확인:
docker-compose ps
python poc_exploit.py
예상 출력:
취약한 시스템:
[INFO] https://localhost:8443/protected-resource에 연결 시도 중...
[WARNING] 취약함: OCSP 확인 실패에도 불구하고 액세스 허용됨.
[WARNING] 응답 미리보기: <html>...
패치된 시스템:
[INFO] https://localhost:8443/protected-resource에 연결 시도 중...
[INFO] 취약하지 않음: 액세스 거부됨 (인증 작동 중).
| 시나리오 | OCSP 상태 | 예상 (패치됨) | 결과 (취약) | 참고 |
|---|---|---|---|---|
| 정상 작동 | 온라인 및 유효 | 200 OK ✓ | 200 OK ✓ | OCSP 확인 성공, 액세스 허용 |
| 소프트 실패 | 오프라인/시간 초과 | 403 Forbidden ✓ | 200 OK ✗ | 우회 - OCSP 응답자 연결 불가 |
| 하드 폐기 | 온라인 및 폐기됨 | 403 Forbidden ✓ | 403 Forbidden ✓ | 인증서가 명시적으로 폐기됨 |
| 잘못된 인증서 | 잘못된 체인 | 403 Forbidden ✓ | 403 Forbidden ✓ | 체인 검증 실패 |
테스트 1: 기본 (OCSP 응답자 실패)
# 컨테이너 실행 유지
python poc_exploit.py
테스트 2: OCSP 응답자 중지 (시간 초과 시뮬레이션)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
테스트 3: curl을 사용한 수동 테스트
curl -v \
--cert certs/client-cert.pem \
--key certs/client-key.pem \
--cacert certs/ca-chain.pem \
https://localhost:8443/protected-resource
CVE-2026-29145-Tester/
├── README.md # 이 파일
├── setup_certs.sh # 인증서 생성 스크립트 - Bash (Linux/macOS)
├── setup_certs.ps1 # 인증서 생성 스크립트 - PowerShell (Windows)
├── cleanup.sh # 정리 및 초기화 스크립트 - Bash (Linux/macOS)
├── cleanup.ps1 # 정리 및 초기화 스크립트 - PowerShell (Windows)
├── run_test.sh # 자동화된 전체 테스트 주기 스크립트
├── docker-compose.yml # Docker 서비스 오케스트레이션
├── requirements.txt # Python 종속성
├── poc_exploit.py # 주요 테스트 스크립트 (로깅 및 오류 처리 포함)
├── simple_proxy_fail.py # 모의 OCSP 응답자 (상세 로깅 포함)
├── .gitignore # 인증서 및 로그용 Git 무시 규칙
├── certs/ # 생성된 인증서 (setup_certs 스크립트로 생성)
│ ├── ca-chain.pem # 루트 CA 인증서
│ ├── ca-key.pem # 루트 CA 개인 키
│ ├── server-cert.pem # Tomcat 서버 인증서
│ ├── server-key.pem # Tomcat 서버 개인 키
│ ├── client-cert.pem # 테스트 클라이언트 인증서
│ └── client-key.pem # 테스트 클라이언트 개인 키
├── tomcat/
│ └── server.xml # 취약한 Tomcat 구성
└── logs/ # Tomcat 로그 (런타임 시 생성)
tomcat/server.xml 파일은 다음을 구성합니다:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
주요 설정:
certificateVerification="required" - CLIENT_CERT 인증 강제OCSP on - OCSP 폐기 확인 활성화모의 OCSP 응답자(simple_proxy_fail.py):
localhost:8888에서 수신 대기# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
원인: 인증서 생성이 실패했거나 실행되지 않았습니다.
# 정리 후 재생성
rm -rf certs
./setup_certs.sh
원인: Tomcat 컨테이너가 실행 중이 아니거나 준비되지 않았습니다.
# 컨테이너 상태 확인
docker-compose ps
# 로그 확인
docker-compose logs vulnerable-tomcat
# 두 서비스가 모두 실행 중이고 정상인지 확인
docker-compose up -d
sleep 10 # 서비스 시작 대기
원인: Tomcat 시작이 너무 오래 걸리거나 네트워크 문제가 있습니다.
# Tomcat 시작 로그 확인
docker-compose logs vulnerable-tomcat
# 시간 초과 증가 및 재시도
timeout 30 docker-compose logs -f vulnerable-tomcat # 시작 모니터링
원인: Docker Compose가 설치되지 않았거나 PATH에 없습니다.
# Docker Compose 설치 (독립 실행형 사용 시)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.x.x/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 또는 docker compose 사용 (Docker Desktop에 통합된 V2)
docker compose up -d
원인: 인증서 검증 실패.
# 인증서 파일 존재 확인
ls -la certs/
# 인증서 유효성 확인
openssl x509 -in certs/client-cert.pem -noout -text
원인: SSL 핸드셰이크 실패 - 하드 실패가 올바르게 작동하고 있음을 나타낼 수 있습니다.
해결 방법: 이는 실제로 긍정적인 신호입니다! 하드 실패가 OCSP 실패 시 액세스를 차단하고 있습니다.
# OCSP 응답자가 실행 중인지 확인
docker-compose ps ocsp-responder
# 상세 오류 보기
python poc_exploit.py # 이미 상세 로깅 제공
원인: 포트 8443 또는 8888이 이미 사용 중입니다.
# 포트를 사용하는 프로세스 찾기
lsof -i :8443
lsof -i :8888
# 프로세스 종료 또는 docker-compose.yml에서 다른 포트 사용
# Tomcat 로그
docker-compose logs -f vulnerable-tomcat
# OCSP 응답자 로그
docker-compose logs -f ocsp-responder
# Python 스크립트 디버깅
python poc_exploit.py # 이미 상세 로깅 포함
# 터미널을 열고 실행
docker-compose logs -f
# 다른 터미널에서 테스트 실행
python poc_exploit.py
# OCSP 응답자 연결 테스트
curl http://localhost:8888/
# Tomcat 컨테이너 내부에서 OCSP 응답자 테스트
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# SSL 핸드셰이크 테스트
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
모든 컨테이너, 볼륨, 인증서 및 로그를 제거하려면:
Linux/macOS:
./cleanup.sh
Windows (PowerShell):
.\cleanup.ps1
이 작업이 수행하는 것:
certs/ 디렉토리 제거logs/ 디렉토리 제거정리 확인:
docker-compose ps # 아무것도 표시되지 않아야 함
ls -la certs/ # 존재하지 않아야 함
이 프로젝트는 교육 및 승인된 보안 테스트 목적으로만 사용됩니다.
이 취약점을 완화하려면 Apache Tomcat을 다음 버전으로 업그레이드하십시오:
| 버전 시리즈 | 최소 수정 버전 |
|---|---|
| 11.0.x | 11.0.20 이상 |
| 10.1.x | 10.1.53 이상 |
| 9.0.x | 9.0.116 이상 |
업그레이드 단계:
# 예: docker-compose.yml을 패치된 버전으로 업데이트
# 변경: image: tomcat:10.1.52-jdk17
# 대상: image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
문제, 질문 또는 기여 사항이 있으면 이슈를 열거나 풀 리퀘스트를 제출하십시오.
마지막 업데이트: 2026년 4월
상태: 테스트 및 문서화 완료