
PoC solo de bloqueo para CVE-2025-69420 que demuestra una vulnerabilidad de confusión de tipos en la verificación de Respuesta de TimeStamp de OpenSSL mediante atributos de certificado de firma ESS malformados.
Reproductor de laboratorio exclusivamente de caída para CVE-2025-69420 en OpenSSL. El PoC carga una TimeStamp Response RFC 3161 válida, cambia en memoria el atributo ESS firmado de V_ASN1_SEQUENCE a V_ASN1_NULL y llama a TS_RESP_verify_response().
En una compilación afectada, ossl_ess_get_signing_cert_v2() o ossl_ess_get_signing_cert() accede a la unión ASN1_TYPE como una secuencia sin validar el tipo activo. UBSan informa de acceso a un miembro a través de un puntero ASN1_STRING nulo. El impacto esperado es la terminación del proceso / denegación de servicio; este repositorio no contiene lógica de ejecución de código.
La salida de prueba proporcionada confirma el problema:
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
Esto coincide con la descripción de la vulnerabilidad: una TimeStamp Response malformada llega a TS_RESP_verify_response(), y un atributo ESS de certificado de firma de un tipo distinto de V_ASN1_SEQUENCE provoca una desreferencia de puntero inválida o NULL.
Pruébelo únicamente en un entorno aislado contra una compilación de OpenSSL que sea suya o que esté autorizado a evaluar. Este es un reproductor exclusivamente de caída.
Ruta de compilación predeterminada:
/path/to/openssl-3.0.7-asan
Puede sobrescribirla cuando sea necesario:
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
O ejecute todo por separado:
./scripts/prepare.sh
./scripts/build.sh
./scripts/run.sh
El script prepare.sh usa el openssl.cnf mínimo del repositorio, por lo que no depende de la existencia de $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
Las direcciones y números de línea exactos varían según la compilación. Con UBSAN_OPTIONS=halt_on_error=1, el proceso termina en la primera operación indefinida detectada.
El atributo malformado debe rechazarse limpiamente, sin hallazgos del sanitizador ni caída del proceso. El PoC entonces imprime:
[+] Malformed response rejected without a crash
El valor de tipo de atributo original 16 es V_ASN1_SEQUENCE. El PoC lo cambia a V_ASN1_NULL. En la implementación afectada, el código trata posteriormente el miembro de la unión como value.sequence y lo desreferencia. Dado que el miembro activo no es una secuencia, UBSan detecta el acceso a un miembro a través de un ASN1_STRING * nulo.
Esto es una confusión de tipos / ausencia de comprobación de condiciones excepcionales, más que un desbordamiento de búfer en heap o en la pila.
poc.c — reproductor mínimoscripts/prepare.sh — genera la clave TSA, el certificado, la solicitud y una respuesta válidascripts/build.sh — compila contra la compilación de OpenSSL con ASan/UBSanscripts/run.sh — se ejecuta con la configuración de sanitizadoresopenssl.cnf — configuración mínima de provider/solicitudtsa.conf — configuración local de TSA RFC 3161evidence/confirmed-output.txt — traza de sanitizador confirmada y abreviada4e254b48ad93cc092be3dd62d97015f33f73133a