
Prüft lokale curl/libcurl-Builds auf Exposition gegenüber der Use-after-free-Schwachstelle CVE-2026-92392 bei HTTP/2-Uploads, mit passiver Inventarisierung, Scanning eingebundener Images und einer begrenzten Loopback-PoC-Sonde.
cve_2026_92392_check.py bewertet lokale curl- und libcurl-Artefakte auf
CVE-2026-92392, einen Use-after-free
bei HTTP/2-Uploads in curl/libcurl.
Es unterstützt passive lokale Inventarisierung, die Bewertung bereitgestellter Banner, nicht ausführendes Scannen eingebundener Images und eine begrenzte Loopback-HTTP/2-Protokollsonde. Die Sonde ist defensiv und nicht waffenfähig. Sie enthält keine Befehlsnutzlast, keinen Shellcode, keine Manipulation von Speicheradressen, keine Logik zur Informationspreisgabe und keine RCE-Nutzlast.
Die aktive Sonde bindet ausschließlich an 127.0.0.1, akzeptiert keine
entfernte Ziel-URL oder keinen entfernten Host und führt ausschließlich die
ausgewählte lokale curl-Binärdatei aus.
Der Checker unterscheidet vier verschiedene Evidenzstufen:
| Evidenzstufe | Was sie feststellt | Was sie nicht feststellt |
|---|---|---|
| Build-Klassifizierung | Ob ein versionsqualifiziertes curl/libcurl-Artefakt außerhalb des upstream betroffenen Bereichs liegt, upstream betroffen mit unbekanntem Vendor-Patch-Status ist oder anhand bereitgestellter Patch-Status-Evidenz als bestätigt betroffen gilt | Ob eine Anwendung tatsächlich den betroffenen HTTP/2-Upload-Pfad nutzt |
| Laufzeit-Exposure-Kontext | Ob bereitgestellte Anwendungsfakten darauf hindeuten, dass HTTP/2-Uploads einen angreiferkontrollierten Endpunkt erreichen können | Ob die Schwachstelle ausgelöst wurde |
| Protokollstimulus | Ob der lokale Loopback-Harness beide dokumentierten Reset-Varianten mit zwei Uploads auf einer HTTP/2-Verbindung übermittelt hat | Einen Use-after-free, eine Absturzursache oder Codeausführung |
| CVE-zugeordnetes Sanitizer-Ergebnis | Ob die Kandidatensequenz, ein AddressSanitizer-Heap-Use-after-free, eine upstream betroffene Artefaktidentität und ein passender HTTP/2-Stack alle beobachtet wurden | Zuverlässigkeit oder praktische Ausnutzbarkeit auf einem anderen System |
Ein sauberer Lauf, ein unvollständiger Protokolllauf oder ein nicht abstürzender Sanitizer-Lauf beweist nicht, dass ein Build sicher ist.
CVE-2026-92392 betrifft die HTTP/2-Upload-Verarbeitung von curl/libcurl.
Während eines Uploads kann ein betroffener Build ein HTTP/2-RST_STREAM
verarbeiten, das entweder REFUSED_STREAM oder HTTP_1_1_REQUIRED trägt.
Gepufferte Upload-Daten können dann als neue Anfrage geparst werden, nachdem
der HTTP/2-Zustand des ursprünglichen Transfers abgetrennt wurde. Ein späterer
HTTP/2-Callback kann einen veralteten Curl_easy-Zeiger dereferenzieren.
Der REA-Vergleich, der zur Überarbeitung dieses Checkers verwendet wurde, bestätigte den relevanten Unterschied in der Bereinigungsreihenfolge:
Curl_conn_ev_data_done auf, verarbeitet
ausstehende Handles und ruft erst dann Curl_req_done auf.Curl_req_done erreicht req_flush, während der HTTP/2-Data-Done-Pfad
bereits den Stream-Kontext gelöscht hat.Curl_req_done vor
Curl_conn_ev_data_done aus und beseitigt damit diese veraltete
Reihenfolge.Dies ist Implementierungsevidenz, die das Proof-Modell des Checkers stützt. Der Vendor-Patch-Status erfordert weiterhin eine unabhängige Verifikation.
Die Upstream-Beratung identifiziert die verwundbare Implementierung als in curl 8.12.0 eingeführt. Der Checker klassifiziert Upstream-Releases wie folgt:
| Release-Bedingung | Klassifizierung |
|---|---|
| Früher als 8.12.0 | NOT AFFECTED |
| 8.12.0 bis 8.22.0, ausgenommen korrigierte Backports | Upstream betroffen |
| 8.14-Zweig ab 8.14.3 | Korrigierter Backport |
| 8.16-Zweig ab 8.16.2 | Korrigierter Backport |
| 8.20-Zweig ab 8.20.2 | Korrigierter Backport |
| 8.23.0 oder später | NOT AFFECTED |
| Entwicklungs-, Snapshot-, Nightly- oder mehrdeutige Version | INDETERMINATE |
Ein Vendor kann den Fix zurückportieren, ohne die Upstream-Versionszeichenfolge von curl zu ändern. Daher ist eine betroffene Upstream-Version Inventarisierungsevidenz, kein schlüssiger Beweis dafür, dass ein Vendor-Build ungepatcht ist.
Verwenden Sie --patch-state nur, wenn der nachgelagerte semantische
Fix-Status durch Vendor-Beratungen, Paket-Changelogs, Quellcodevergleich oder
eine andere vertrauenswürdige Methode auf Artefaktebene verifiziert wurde.
--patch-state-Wert | Bedeutung |
|---|---|
unknown | Standard. Eine betroffene Upstream-Version erzeugt UPSTREAM-AFFECTED VERSION. |
absent | Der Betreiber hat unabhängig verifiziert, dass der Downstream-Fix fehlt. Ein HTTP/2-fähiger betroffener Build erzeugt AFFECTED BUILD. |
present | Der Betreiber hat unabhängig verifiziert, dass der semantische Downstream-Fix vorhanden ist. Dies ist eine Betreiberaussage, kein automatischer Nachweis der binären Äquivalenz zum Upstream-Fix von curl. |
--poc.--poc-proof asan.openssl nur bei Verwendung von --tls.Der aktive PoC-Modus lehnt Skripte, Wrapper, nicht identifizierte native Executables und PE/Windows-Binärdateien ab. Die passive Bewertung bleibt für Banner und eingebundene Dateisysteme verfügbar.
Das in PATH gefundene curl-Binary inspizieren:
python3 cve_2026_92392_check.py
Emit JSON:
python3 cve_2026_92392_check.py --json
Führe interne Selbsttests aus:
python3 cve_2026_92392_check.py --self-test
python3 -O cve_2026_92392_check.py --self-test
Untersuchen Sie eine ausgewählte curl-Executable und die libcurl-Shared-Library:
python3 cve_2026_92392_check.py \
--curl-binary /opt/curl/bin/curl \
--libcurl-path /opt/curl/lib/libcurl.so \
--json
Bewerte ein vertrauenswürdiges curl-Banner, ohne eine Binärdatei auszuführen:
python3 cve_2026_92392_check.py \
--version-string 'curl 8.12.0 libcurl/8.12.0 nghttp2/1.61.0' \
--json
Eine reine Versionsangabe wie 8.12.0 wird nicht als verifizierter Nachweis für die Identität von curl/libcurl akzeptiert.
Der Checker kontaktiert bewusst keine Remote-Hosts. Rufen Sie das Banner über einen autorisierten administrativen Kanal ab, speichern Sie es lokal und bewerten Sie es anschließend lokal:
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
Wenn eine Anwendungsprüfung oder ein vertrauenswürdiger Trace belegt, dass Uploads HTTP/2 verwenden, einen vom Angreifer kontrollierten Endpunkt erreichen können und dessen HTTPS-Zertifikat akzeptieren, geben Sie diese Fakten explizit an:
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
Für Klartext-h2c verwenden Sie --https-certificate not-applicable.
--http2-use yes kennzeichnet die HTTP/2-Nutzung zur Laufzeit. Es beweist nicht, dass das
Artefakt mit HTTP/2-Unterstützung kompiliert wurde. In ähnlicher Weise beschreibt --untrusted-upload yes
den Datenfluss der Anwendung, während --https-certificate yes die
separate HTTPS-Vertrauensbedingung erfasst.