
Comprueba las compilaciones locales de curl/libcurl en busca de exposición a use-after-free en la carga HTTP/2 de CVE-2026-92392, con inventario pasivo, escaneo de imágenes montadas y una sonda PoC de loopback acotada.
cve_2026_92392_check.py evalúa artefactos locales de curl y libcurl en busca de
CVE-2026-92392, un use-after-free en la carga HTTP/2
de curl/libcurl.
Admite inventario local pasivo, evaluación de banners proporcionados, escaneo de imágenes montadas sin ejecución y una sonda de protocolo HTTP/2 de loopback acotada. La sonda es defensiva y no está weaponizada. No contiene payload de comandos, shellcode, manipulación de direcciones de memoria, lógica de fuga de información ni payload de RCE.
La sonda activa se enlaza únicamente a 127.0.0.1, no acepta ninguna URL de destino remoto ni
host, y ejecuta únicamente el binario local de curl seleccionado.
El comprobador separa cuatro niveles de evidencia distintos:
| Nivel de evidencia | Qué establece | Qué no establece |
|---|---|---|
| Clasificación de compilación | Si un artefacto curl/libcurl con versión cualificada está fuera del rango afectado upstream, afectado upstream con estado de parche del proveedor desconocido, o afectado confirmado usando la evidencia de estado de parche proporcionada | Si una aplicación realmente utiliza la ruta de carga HTTP/2 afectada |
| Contexto de exposición en tiempo de ejecución | Si los datos de la aplicación proporcionados indican que las cargas HTTP/2 pueden alcanzar un endpoint controlado por el atacante | Si la vulnerabilidad fue desencadenada |
| Estímulo de protocolo | Si el arnés de loopback local entregó ambas variantes de reset documentadas con dos cargas en una misma conexión HTTP/2 | Un use-after-free, la causa de un fallo o la ejecución de código |
| Resultado del sanitizador atribuido a la CVE | Si la secuencia candidata, un heap-use-after-free de AddressSanitizer, una identidad de artefacto afectado upstream y una pila HTTP/2 coincidente fueron todos observados | La fiabilidad o la explotabilidad práctica en otro sistema |
Una ejecución limpia, una ejecución de protocolo incompleta o una ejecución del sanitizador sin fallos no demuestran que una compilación sea segura.
CVE-2026-92392 afecta al manejo de cargas HTTP/2 de curl/libcurl. Durante una carga,
una compilación afectada puede procesar un RST_STREAM HTTP/2 que transporte
REFUSED_STREAM o HTTP_1_1_REQUIRED. Los datos de carga almacenados en búfer pueden entonces
ser analizados como una nueva solicitud después de que el estado HTTP/2 de la transferencia original
fuera desacoplado. Una llamada de retorno HTTP/2 posterior puede desreferenciar un puntero Curl_easy
obsoleto.
La comparación REA utilizada para revisar este comprobador confirmó la diferencia relevante en el orden de limpieza:
Curl_conn_ev_data_done, procesa los handles pendientes
y solo entonces llama a Curl_req_done.Curl_req_done llega a req_flush, mientras que la ruta de data-done de HTTP/2 ya
ha limpiado el contexto del stream.Curl_req_done antes de
Curl_conn_ev_data_done, eliminando ese orden obsoleto.Esta es evidencia de implementación que respalda el modelo de prueba del comprobador. El estado de parche del proveedor sigue requiriendo verificación independiente.
El aviso upstream identifica la implementación vulnerable como introducida en curl 8.12.0. El comprobador clasifica las versiones upstream de la siguiente manera:
| Condición de la versión | Clasificación |
|---|---|
| Anterior a 8.12.0 | NOT AFFECTED |
| 8.12.0 hasta 8.22.0, excluyendo backports corregidos | Afectada upstream |
| Rama 8.14 en 8.14.3 o posterior | Backport corregido |
| Rama 8.16 en 8.16.2 o posterior | Backport corregido |
| Rama 8.20 en 8.20.2 o posterior | Backport corregido |
| 8.23.0 o posterior | NOT AFFECTED |
| Desarrollo, snapshot, nightly o versión ambigua | INDETERMINATE |
Un proveedor puede aplicar el backport de la corrección sin cambiar la cadena de versión upstream de curl. Por lo tanto, una versión upstream afectada es evidencia de inventario, no prueba concluyente de que una compilación del proveedor no esté parcheada.
Use --patch-state solo cuando el estado de corrección semántica downstream haya sido
verificado mediante avisos del proveedor, changelogs de paquetes, comparación de código fuente u
otro método fiable a nivel de artefacto.
valor de --patch-state | Significado |
|---|---|
unknown | Predeterminado. Una versión upstream afectada produce UPSTREAM-AFFECTED VERSION. |
absent | El operador ha verificado de forma independiente que la corrección downstream está ausente. Una compilación afectada con capacidad HTTP/2 produce AFFECTED BUILD. |
present | El operador ha verificado de forma independiente que la corrección semántica downstream está presente. Esta es una afirmación del operador, no una prueba automática de equivalencia binaria con la corrección upstream de curl. |
--poc.--poc-proof asan.openssl solo cuando se usa --tls.El modo PoC activo rechaza scripts, wrappers, ejecutables nativos no identificados y binarios PE/Windows. La evaluación pasiva sigue disponible para banners y sistemas de archivos montados.
Inspeccionar el binario de curl encontrado en PATH:
python3 cve_2026_92392_check.py
Emitir JSON:
python3 cve_2026_92392_check.py --json
Ejecutar las autopruebas internas:
python3 cve_2026_92392_check.py --self-test
python3 -O cve_2026_92392_check.py --self-test
Inspeccione un ejecutable curl seleccionado y la biblioteca compartida libcurl:
python3 cve_2026_92392_check.py \
--curl-binary /opt/curl/bin/curl \
--libcurl-path /opt/curl/lib/libcurl.so \
--json
Evalúa un banner de curl de confianza sin ejecutar un binario:
python3 cve_2026_92392_check.py \
--version-string 'curl 8.12.0 libcurl/8.12.0 nghttp2/1.61.0' \
--json
Una versión simple como 8.12.0 no se acepta como evidencia verificada de la identidad de curl/libcurl.
El verificador deliberadamente no contacta hosts remotos. Obtenga el banner a través de un canal administrativo autorizado, guárdelo localmente y luego evalúelo localmente:
ssh [email protected] 'curl --version' > host-curl-version.txt
python3 cve_2026_92392_check.py \
--version-file host-curl-version.txt \
--http2-use unknown \
--untrusted-upload unknown \
--https-certificate unknown \
--json
Si la revisión de la aplicación o una traza de confianza establece que las cargas usan HTTP/2, pueden alcanzar un endpoint controlado por el atacante y aceptan su certificado HTTPS, proporcione esos hechos explícitamente:
python3 cve_2026_92392_check.py \
--version-file host-curl-version.txt \
--http2-use yes \
--untrusted-upload yes \
--https-certificate yes \
--patch-state unknown \
--json
Para h2c en texto claro, use --https-certificate not-applicable.
--http2-use yes identifica el uso de HTTP/2 en tiempo de ejecución. No prueba que el
artefacto se haya compilado con soporte para HTTP/2. De manera similar, --untrusted-upload yes
describe el flujo de datos de la aplicación, mientras que --https-certificate yes registra la
condición de confianza HTTPS por separado.