Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
upb-any-recursion-audit — Harnais d'audit testant si la classe de bug de récursion de déballage Any CVE-2026-0994 affecte le cœur C d'upb dans les bindings protobuf Ruby et PHP, avec des charges utiles ASan/UBSan. | Kitploit
Outils/GitHubGitHub/vardhan0257/upb-any-recursion-audit
Analyse StatiqueCriminalistique MémoireAnalyse des VulnérabilitésFuzzingAnalyse de BinairesArticles et RechercheApprentissage et Éducation
GitHubvardhan0257/upb-any-recursion-audit

upb-any-recursion-audit

Harnais d'audit testant si la classe de bug de récursion de déballage Any CVE-2026-0994 affecte le cœur C d'upb dans les bindings protobuf Ruby et PHP, avec des charges utiles ASan/UBSan.

Voir le dépôt
il y a 2h 29mPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Audit de récursion Any de upb (bindings Ruby / PHP)

Suite aux CVE de récursion de déballage Any confirmés dans les bindings Python et JavaScript de protobuf (plus récemment CVE-2026-0994, un bug purement Python dans _ConvertAnyMessage de json_format.py, qui récursait via methodcaller() au lieu de ConvertMessage() et sautait silencieusement le compteur de profondeur).

Question : la même classe de bug existe-t-elle dans le cœur C upb intégré dans les extensions natives Ruby et PHP ?

Réponse courte : non. Le chemin de décodage JSON et le chemin de décodage binaire wire appliquent tous deux correctement leurs limites de récursion dans tous les cas testés ici, y compris une charge de stress à 200 000 niveaux exécutée sous une pile de 1 Mo. Il s'agit d'une hypothèse falsifiée avec preuves, pas d'une vulnérabilité — elle est consignée ici comme un résultat négatif propre, de la même manière qu'on consignerait une hypothèse falsifiée dans n'importe quel autre fil de recherche.

Ce qui est réellement testé

Les extensions natives Ruby et PHP de protobuf intègrent chacune un amalgame mono-fichier du cœur C de upb (ruby-upb.c, php-upb.c) plutôt que de lier une bibliothèque partagée. Cet audit compile ce fichier exact comme cible C autonome — sans runtime Ruby ni PHP impliqué — initialise un upb_DefPool avec les descripteurs google.protobuf.Any / Struct / Value / ListValue, et pilote les véritables points d'entrée du décodeur (upb_JsonDecode, upb_Decode) directement avec des charges adversariales, sous ASan/UBSan.

CheminGardeLimite par défautRésultat
Décodage JSON, jsondec_any (Ruby)d->depth, vérifié dans jsondec_push64Falsifié — erreur propre sur une charge à 5000 niveaux, l'offset d'octet correspond exactement à ~64 niveaux
Décodage binaire wire, upb_Decode (Ruby)Decode_LimitDepth100Falsifié — kUpb_DecodeStatus_MaxDepthExceeded propre sur une charge limite à 60 niveaux et sur une charge de stress à 200 000 niveaux, à la fois sous une pile de 8 Mo et une pile de 1 Mo (approximant un thread Ruby non principal)
Binding PHPmêmes fonctions de gardemêmesFalsifié par preuve d'identité, pas par une exécution séparée — voir ci-dessous

Aucune violation ASan ou UBSan n'a été observée dans aucune exécution. Aucun crash, aucun blocage, aucun épuisement de pile.

Pourquoi PHP n'a pas été exécuté séparément

php-upb.c et ruby-upb.c diffèrent d'environ 1 964 lignes au total, mais jsondec_any, jsondec_push et les constantes de limite de profondeur wire sont octet pour octet identiques entre les deux fichiers (verify_php_identical.sh le prouve, ne le prenez pas pour argent comptant — exécutez-le). Comme le code de garde lui-même est prouvablement le même, le résultat Ruby se transpose sans nécessiter de harnais PHP redondant.

Ce qui reste ouvert

  • Binding C# — code purement managé, non basé sur upb (JsonParser / CodedInputStream avec leur propre gestion de RecursionLimit). Genuinement non testé ; ce dépôt ne le couvre pas encore.
  • D'autres classes de bugs dans ce même cœur upb ne sont pas testées : confusion du registre d'extensions, parsing de mini_table, la validation utf8_range.c intégrée.

Reproduire ceci

root@kitploit:~
./fetch_source.sh          # pins & clones protobuf @ ead3f0029facc43da13588132e9091bf9bd7a26f
./build.sh                 # compiles both harnesses w/ ASan+UBSan against the fetched source
./run_tests.sh              # generates payloads, runs the full matrix, prints results
./verify_php_identical.sh   # confirms the PHP claim above instead of asserting it

Nécessite : gcc, protoc (apt-get install protobuf-compiler), python3, git. Compilé et vérifié avec gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 et libprotoc 3.21.12 — des versions différentes peuvent se comporter différemment ; si vos résultats ne correspondent pas au tableau ci-dessus, c'est une donnée, pas un bug dans votre configuration. Découvrez pourquoi avant de supposer qu'il s'agit d'une incompatibilité d'outillage.

Note de provenance

third_party/ (récupéré par fetch_source.sh) contient le code source protobuf de Google sous licence Apache-2.0, épinglé au commit ci-dessus. Il n'est jamais commité dans ce dépôt — fetch_source.sh est l'ancre de reproductibilité au lieu d'intégrer l'arbre source de quelqu'un d'autre dans celui-ci.

Télécharger l’outil