
Vérifie les builds locaux de curl/libcurl pour l'exposition à la faille use-after-free lors des uploads HTTP/2 de CVE-2026-92392, avec un inventaire passif, l'analyse d'images montées et une sonde PoC bornée en boucle locale.
cve_2026_92392_check.py évalue les artefacts curl et libcurl locaux pour
CVE-2026-92392, une utilisation après libération (use-after-free) lors du téléversement HTTP/2 dans curl/libcurl.
Il prend en charge l'inventaire local passif, l'évaluation à partir de bannières fournies, l'analyse d'images montées sans exécution, et une sonde de protocole HTTP/2 en boucle locale bornée. La sonde est défensive et non weaponisée. Elle ne contient aucune charge utile de commande, aucun shellcode, aucune manipulation d'adresse mémoire, aucune logique de fuite d'information ni aucune charge utile RCE.
La sonde active se lie uniquement à 127.0.0.1, n'accepte aucune URL de cible distante ni aucun hôte, et n'exécute que le binaire curl local sélectionné.
Le vérificateur distingue quatre niveaux de preuve différents :
| Niveau de preuve | Ce qu'il établit | Ce qu'il n'établit pas |
|---|---|---|
| Classification de build | Si un artefact curl/libcurl qualifié par version se situe hors de la plage affectée en amont, est affecté en amont avec un état de correctif fournisseur inconnu, ou est confirmé affecté à l'aide de preuves d'état de correctif fournies | Si une application utilise réellement le chemin de téléversement HTTP/2 affecté |
| Contexte d'exposition à l'exécution | Si les faits applicatifs fournis indiquent que des téléversements HTTP/2 peuvent atteindre un point de terminaison contrôlé par un attaquant | Si la vulnérabilité a été déclenchée |
| Stimulus de protocole | Si le harnais en boucle locale a délivré les deux variantes de réinitialisation documentées avec deux téléversements sur une même connexion HTTP/2 | Une utilisation après libération, une cause de plantage ou une exécution de code |
| Résultat de sanitizer attribué à la CVE | Si la séquence candidate, une utilisation après libération de tas (heap-use-after-free) détectée par AddressSanitizer, une identité d'artefact affecté en amont et une pile HTTP/2 correspondante ont toutes été observées | La fiabilité ou l'exploitabilité pratique sur un autre système |
Une exécution propre, une exécution de protocole incomplète ou une exécution de sanitizer sans plantage ne prouve pas qu'un build est sûr.
CVE-2026-92392 affecte la gestion des téléversements HTTP/2 de curl/libcurl. Pendant un téléversement, un build affecté peut traiter un RST_STREAM HTTP/2 portant soit REFUSED_STREAM, soit HTTP_1_1_REQUIRED. Les données de téléversement mises en tampon peuvent alors être analysées comme une nouvelle requête après que l'état HTTP/2 du transfert d'origine a été détaché. Un rappel HTTP/2 ultérieur peut déréférencer un pointeur Curl_easy obsolète.
La comparaison REA utilisée pour réviser ce vérificateur a confirmé la différence d'ordonnancement du nettoyage pertinente :
Curl_conn_ev_data_done, traite les handles en attente, et seulement ensuite appelle Curl_req_done.Curl_req_done atteint req_flush, tandis que le chemin data-done HTTP/2 a déjà effacé le contexte de flux.Curl_req_done avant Curl_conn_ev_data_done, éliminant cet ordonnancement obsolète.Il s'agit de preuves d'implémentation étayant le modèle de preuve du vérificateur. L'état du correctif fournisseur nécessite toujours une vérification indépendante.
L'avis amont identifie l'implémentation vulnérable comme introduite dans curl 8.12.0. Le vérificateur classe les versions amont comme suit :
| Condition de version | Classification |
|---|---|
| Antérieure à 8.12.0 | NOT AFFECTED |
| De 8.12.0 à 8.22.0, hors rétroportages corrigés | Affectée en amont |
| Branche 8.14 à partir de 8.14.3 | Rétroportage corrigé |
| Branche 8.16 à partir de 8.16.2 | Rétroportage corrigé |
| Branche 8.20 à partir de 8.20.2 | Rétroportage corrigé |
| 8.23.0 ou ultérieure | NOT AFFECTED |
| Développement, snapshot, nightly ou version ambiguë | INDETERMINATE |
Un fournisseur peut rétroporter le correctif sans modifier la chaîne de version amont de curl. Par conséquent, une version amont affectée constitue une preuve d'inventaire, et non une preuve concluante qu'un build fournisseur n'est pas corrigé.
Utilisez --patch-state uniquement lorsque l'état du correctif sémantique en aval a été vérifié au moyen d'avis fournisseurs, de journaux de modifications de paquets, d'une comparaison de sources ou d'une autre méthode fiable au niveau de l'artefact.
Valeur de --patch-state | Signification |
|---|---|
unknown | Par défaut. Une version amont affectée produit UPSTREAM-AFFECTED VERSION. |
absent | L'opérateur a vérifié de manière indépendante que le correctif en aval est absent. Une build affectée compatible HTTP/2 produit AFFECTED BUILD. |
present | L'opérateur a vérifié de manière indépendante que le correctif sémantique en aval est présent. Il s'agit d'une assertion de l'opérateur, et non d'une preuve automatique d'équivalence binaire avec le correctif amont de curl. |
--poc.--poc-proof asan.openssl uniquement lorsque --tls est utilisé.Le mode PoC actif refuse les scripts, les wrappers, les exécutables natifs non identifiés et les binaires PE/Windows. L'évaluation passive reste disponible pour les bannières et les systèmes de fichiers montés.
Inspecter le binaire curl trouvé dans PATH :
python3 cve_2026_92392_check.py
Émettre du JSON :
python3 cve_2026_92392_check.py --json
Exécuter les autotests internes :
python3 cve_2026_92392_check.py --self-test
python3 -O cve_2026_92392_check.py --self-test
Inspectez un exécutable curl sélectionné et la bibliothèque partagée libcurl :
python3 cve_2026_92392_check.py \
--curl-binary /opt/curl/bin/curl \
--libcurl-path /opt/curl/lib/libcurl.so \
--json
Évaluer une bannière curl de confiance sans exécuter de binaire :
python3 cve_2026_92392_check.py \
--version-string 'curl 8.12.0 libcurl/8.12.0 nghttp2/1.61.0' \
--json
Une version nue telle que 8.12.0 n'est pas acceptée comme preuve vérifiée de l'identité de curl/libcurl.
Le vérificateur ne contacte délibérément pas les hôtes distants. Obtenez la bannière via un canal administratif autorisé, enregistrez-la localement, puis évaluez-la localement :
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 l'examen de l'application ou une trace de confiance établit que les téléversements utilisent HTTP/2, peuvent atteindre un point de terminaison contrôlé par l'attaquant et acceptent son certificat HTTPS, fournissez ces faits explicitement :
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
Pour h2c en clair, utilisez --https-certificate not-applicable.