
Verifica le build locali di curl/libcurl per l'esposizione a use-after-free nell'upload HTTP/2 di CVE-2026-92392, con inventario passivo, scansione di immagini montate e una sonda PoC su loopback limitata.
cve_2026_92392_check.py valuta gli artefatti locali di curl e libcurl per
CVE-2026-92392, un use-after-free
nell'upload HTTP/2 in curl/libcurl.
Supporta l'inventario locale passivo, la valutazione di banner forniti, la scansione non esecutiva di immagini montate e una sonda di protocollo HTTP/2 su loopback limitata. La sonda è difensiva e non weaponizzata. Non contiene payload di comandi, shellcode, manipolazione di indirizzi di memoria, logica di fuga di informazioni o payload RCE.
La sonda attiva si associa solo a 127.0.0.1, non accetta URL o host di
destinazione remoti ed esegue solo il binario curl locale selezionato.
Il verificatore distingue quattro diversi livelli di evidenza:
| Livello di evidenza | Cosa stabilisce | Cosa non stabilisce |
|---|---|---|
| Classificazione della build | Se un artefatto curl/libcurl qualificato per versione è al di fuori dell'intervallo interessato upstream, interessato upstream con stato di patch del fornitore sconosciuto, o confermato interessato usando l'evidenza sullo stato di patch fornita | Se un'applicazione utilizza effettivamente il percorso di upload HTTP/2 interessato |
| Contesto di esposizione runtime | Se i fatti forniti sull'applicazione indicano che gli upload HTTP/2 possono raggiungere un endpoint controllato da un attaccante | Se la vulnerabilità è stata attivata |
| Stimolo di protocollo | Se l'harness di loopback locale ha consegnato entrambe le varianti di reset documentate con due upload su una singola connessione HTTP/2 | Un use-after-free, la causa di un crash o l'esecuzione di codice |
| Risultato del sanitizer attribuito alla CVE | Se la sequenza candidata, un heap-use-after-free di AddressSanitizer, l'identità di un artefatto interessato upstream e uno stack HTTP/2 corrispondente sono stati tutti osservati | Affidabilità o sfruttabilità pratica su un altro sistema |
Un'esecuzione pulita, un'esecuzione di protocollo incompleta o un'esecuzione del sanitizer senza crash non dimostrano che una build sia sicura.
CVE-2026-92392 interessa la gestione degli upload HTTP/2 in curl/libcurl.
Durante un upload, una build interessata può elaborare un RST_STREAM HTTP/2
che trasporta REFUSED_STREAM o HTTP_1_1_REQUIRED. I dati di upload
bufferizzati possono quindi essere interpretati come una nuova richiesta dopo
che lo stato HTTP/2 del trasferimento originale è stato scollegato. Una
successiva callback HTTP/2 può dereferenziare un puntatore Curl_easy
obsoleto.
Il confronto REA utilizzato per revisionare questo verificatore ha confermato la differenza rilevante nell'ordinamento della pulizia:
Curl_conn_ev_data_done, elabora gli handle
in sospeso e solo successivamente chiama Curl_req_done.Curl_req_done raggiunge req_flush, mentre il percorso data-done di
HTTP/2 ha già cancellato il contesto dello stream.Curl_req_done prima di
Curl_conn_ev_data_done, eliminando tale ordinamento obsoleto.Questa è evidenza implementativa a supporto del modello di prova del verificatore. Lo stato di patch del fornitore richiede comunque una verifica indipendente.
L'avviso upstream identifica l'implementazione vulnerabile come introdotta in curl 8.12.0. Il verificatore classifica le release upstream come segue:
| Condizione della release | Classificazione |
|---|---|
| Precedente a 8.12.0 | NOT AFFECTED |
| Da 8.12.0 a 8.22.0, esclusi i backport corretti | Interessata upstream |
| Ramo 8.14 alla 8.14.3 o successiva | Backport corretto |
| Ramo 8.16 alla 8.16.2 o successiva | Backport corretto |
| Ramo 8.20 alla 8.20.2 o successiva | Backport corretto |
| 8.23.0 o successiva | NOT AFFECTED |
| Sviluppo, snapshot, nightly o versione ambigua | INDETERMINATE |
Un fornitore può applicare il backport della correzione senza modificare la stringa di versione upstream di curl. Pertanto, una versione upstream interessata è evidenza di inventario, non prova conclusiva che una build del fornitore non sia corretta.
Usare --patch-state solo quando lo stato della correzione semantica
downstream è stato verificato tramite avvisi del fornitore, changelog dei
pacchetti, confronto del codice sorgente o un altro metodo affidabile a
livello di artefatto.
valore --patch-state | Significato |
|---|---|
unknown | Predefinito. Una versione upstream interessata produce UPSTREAM-AFFECTED VERSION. |
absent | L'operatore ha verificato in modo indipendente che la correzione downstream è assente. Una build interessata con supporto HTTP/2 produce AFFECTED BUILD. |
present | L'operatore ha verificato in modo indipendente che la correzione semantica downstream è presente. Si tratta di un'asserzione dell'operatore, non di una prova automatica di equivalenza binaria con la correzione upstream di curl. |
--poc.--poc-proof asan.openssl solo quando viene utilizzato --tls.La modalità PoC attiva rifiuta script, wrapper, eseguibili nativi non identificati e binari PE/Windows. La valutazione passiva rimane disponibile per i banner e i filesystem montati.
Ispeziona il binario curl trovato in PATH:
python3 cve_2026_92392_check.py
Emette JSON:
python3 cve_2026_92392_check.py --json
Esegui i self-test interni:
python3 cve_2026_92392_check.py --self-test
python3 -O cve_2026_92392_check.py --self-test
Ispeziona un eseguibile curl selezionato e la libreria condivisa libcurl:
python3 cve_2026_92392_check.py \
--curl-binary /opt/curl/bin/curl \
--libcurl-path /opt/curl/lib/libcurl.so \
--json
Valuta un banner curl attendibile senza eseguire un binario:
python3 cve_2026_92392_check.py \
--version-string 'curl 8.12.0 libcurl/8.12.0 nghttp2/1.61.0' \
--json
Una versione nuda come 8.12.0 non è accettata come prova verificata dell'identità di curl/libcurl.
Il checker deliberatamente non contatta host remoti. Ottieni il banner tramite un canale amministrativo autorizzato, salvalo localmente, quindi valutalo 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
Se la revisione dell'applicazione o una traccia attendibile stabilisce che i caricamenti utilizzano HTTP/2, possono raggiungere un endpoint controllato dall'attaccante e accettano il suo certificato HTTPS, fornire esplicitamente tali fatti:
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
Per h2c in chiaro, usare --https-certificate not-applicable.
--http2-use yes identifica l'uso di HTTP/2 a runtime. Non dimostra che
l'artefatto sia stato compilato con il supporto HTTP/2. Analogamente, --untrusted-upload yes
descrive il flusso di dati dell'applicazione, mentre --https-certificate yes registra la
condizione di fiducia HTTPS separata.