
CVE-2025-69420에 대한 충돌 전용 PoC로, 잘못된 ESS 서명 인증서 속성을 통해 OpenSSL의 타임스탬프 응답 검증에서 타입 혼동 취약점을 시연합니다.
OpenSSL의 CVE-2025-69420에 대한 크래시 전용 실험실 재현기입니다. 이 PoC는 유효한 RFC 3161 TimeStamp 응답을 로드하고, 메모리에서 서명된 ESS 속성을 V_ASN1_SEQUENCE에서 V_ASN1_NULL로 변경한 후 TS_RESP_verify_response()를 호출합니다.
영향을 받는 빌드에서 ossl_ess_get_signing_cert_v2() 또는 ossl_ess_get_signing_cert()는 활성 유형을 검증하지 않고 ASN1_TYPE 공용체를 시퀀스로 접근합니다. UBSan은 널 ASN1_STRING 포인터를 통한 멤버 접근을 보고합니다. 예상 영향은 프로세스 종료/서비스 거부입니다. 이 저장소에는 코드 실행 로직이 포함되어 있지 않습니다.
제공된 테스트 출력이 문제를 확인합니다:
runtime error: member access within null pointer of type 'struct ASN1_STRING'
#0 ossl_ess_get_signing_cert_v2
#1 ts_check_signing_certs
#2 TS_RESP_verify_signature
#3 int_ts_RESP_verify_token
#4 TS_RESP_verify_response
이는 취약점 설명과 일치합니다: 잘못된 형식의 TimeStamp 응답이 TS_RESP_verify_response()에 도달하고, V_ASN1_SEQUENCE가 아닌 유형의 ESS 서명 인증서 속성이 잘못된 또는 NULL 포인터 역참조를 유발합니다.
소유하거나 평가 권한이 있는 OpenSSL 빌드에 대해 격리된 환경에서만 테스트하세요. 이는 크래시 전용 재현기입니다.
기본 빌드 경로:
/path/to/openssl-3.0.7-asan
필요할 때 재정의:
export OPENSSL_BUILD=/path/to/openssl-asan-build
git clone https://github.com/Kha-Beleh/PoC-CVE-2025-69420.git
cd PoC-CVE-2025-69420
export OPENSSL_BUILD=/path/to/openssl-3.0.7-asan
make prepare
make build
make run
또는 각각 별도로 실행:
./scripts/prepare.sh
./scripts/build.sh
./scripts/run.sh
prepare.sh는 저장소의 최소 openssl.cnf를 사용하므로, 누락된 $OPENSSL_BUILD/ssl/openssl.cnf에 의존하지 않습니다.
[+] Loaded valid TimeStamp Response
[+] Found attribute: id-smime-aa-signingCertificateV2
[+] Original ASN.1 type: 16
[+] Attribute changed to V_ASN1_NULL
[+] Calling TS_RESP_verify_response()
crypto/ts/ts_rsp_verify.c:...: runtime error: member access within null pointer of type 'struct ASN1_STRING'
#0 ... in ossl_ess_get_signing_cert_v2
#1 ... in ts_check_signing_certs
#2 ... in TS_RESP_verify_signature
#3 ... in int_ts_RESP_verify_token
#4 ... in TS_RESP_verify_response
정확한 주소와 줄 번호는 빌드에 따라 다릅니다. UBSAN_OPTIONS=halt_on_error=1을 사용하면 프로세스가 첫 번째 감지된 정의되지 않은 작업에서 종료됩니다.
잘못된 형식의 속성은 sanitizer 발견이나 프로세스 충돌 없이 깔끔하게 거부되어야 합니다. 그러면 PoC가 다음을 출력합니다:
[+] Malformed response rejected without a crash
원래 속성 유형 값 16은 V_ASN1_SEQUENCE입니다. PoC가 이를 V_ASN1_NULL로 변경합니다. 영향을 받는 구현에서 코드는 이후에 공용체 멤버를 value.sequence로 취급하고 역참조합니다. 활성 멤버가 시퀀스가 아니기 때문에 UBSan은 널 ASN1_STRING *을 통한 멤버 접근을 감지합니다.
이는 힙 또는 스택 버퍼 오버플로우가 아닌 유형 혼동/예외 조건 검사 누락입니다.
poc.c — 최소 재현기scripts/prepare.sh — TSA 키, 인증서, 요청 및 유효한 응답을 생성합니다scripts/build.sh — ASan/UBSan OpenSSL 빌드에 대해 컴파일합니다scripts/run.sh — sanitizer 설정으로 실행합니다openssl.cnf — 최소 공급자/요청 구성tsa.conf — 로컬 RFC 3161 TSA 구성evidence/confirmed-output.txt — 확인된 sanitizer 추적 요약본4e254b48ad93cc092be3dd62d97015f33f73133a