Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
upb-any-recursion-audit — Arnés de auditoría que prueba si la clase de bug de recursión de desempaquetado Any de CVE-2026-0994 afecta al núcleo C de upb en los bindings de protobuf de Ruby y PHP, con payloads de ASan/UBSan. | Kitploit
Herramientas/GitHubGitHub/vardhan0257/upb-any-recursion-audit
Análisis EstáticoForensia de MemoriaAnálisis de VulnerabilidadesFuzzingAnálisis de BinariosPapers e InvestigaciónAprendizaje y Educación
GitHubvardhan0257/upb-any-recursion-audit

upb-any-recursion-audit

Arnés de auditoría que prueba si la clase de bug de recursión de desempaquetado Any de CVE-2026-0994 afecta al núcleo C de upb en los bindings de protobuf de Ruby y PHP, con payloads de ASan/UBSan.

Ver Repositorio
hace 2h 29mAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Auditoría de recursión Any en upb (bindings de Ruby / PHP)

Continuación de los CVE de recursión por desempaquetado de Any confirmados en los bindings de Python y JavaScript de protobuf (el más reciente, CVE-2026-0994, un bug de Python puro en _ConvertAnyMessage de json_format.py, que recursaba a través de methodcaller() en lugar de ConvertMessage() y omitía silenciosamente el contador de profundidad).

Pregunta: ¿existe la misma clase de bug en el núcleo C de upb incluido en las extensiones nativas de Ruby y PHP?

Respuesta corta: no. Tanto la ruta de decodificación JSON como la ruta de decodificación binaria del wire aplican correctamente sus límites de recursión en todos los casos probados aquí, incluido un payload de estrés de 200.000 niveles ejecutado con una pila de 1MB. Esto es una hipótesis falsada con evidencia, no una vulnerabilidad — se registra aquí como un resultado negativo limpio, de la misma forma en que registrarías una hipótesis falsada en cualquier otro hilo de investigación.

Qué se está probando realmente

Las extensiones nativas de Ruby y PHP de protobuf incluyen cada una una amalgama de un solo archivo del núcleo C de upb (ruby-upb.c, php-upb.c) en lugar de enlazar una biblioteca compartida. Esta auditoría compila ese archivo exacto como un objetivo C independiente — sin runtime de Ruby ni de PHP involucrado — inicializa un upb_DefPool con los descriptores de google.protobuf.Any / Struct / Value / ListValue, y ejecuta los puntos de entrada reales del decodificador (upb_JsonDecode, upb_Decode) directamente con payloads adversariales, bajo ASan/UBSan.

RutaGuardaLímite por defectoResultado
Decodificación JSON, jsondec_any (Ruby)d->depth, verificada en jsondec_push64Falsada — error limpio con payload de 5000 niveles, el offset de bytes coincide exactamente con ~64 niveles
Decodificación binaria del wire, upb_Decode (Ruby)Decode_LimitDepth100Falsada — kUpb_DecodeStatus_MaxDepthExceeded limpio en el payload límite de 60 niveles y en el payload de estrés de 200.000 niveles, ambos con una pila de 8MB y con una pila de 1MB (aproximando un hilo de Ruby no principal)
Binding de PHPmismas funciones de guardamismoFalsada por prueba de identidad, no por una ejecución separada — ver abajo

No se observó ninguna violación de ASan ni de UBSan en ninguna ejecución. Sin crash, sin cuelgue, sin agotamiento de pila.

Por qué PHP no se ejecutó por separado

php-upb.c y ruby-upb.c difieren en ~1.964 líneas en total, pero jsondec_any, jsondec_push y las constantes del límite de profundidad del wire son idénticas byte a byte entre ambos archivos (verify_php_identical.sh lo demuestra, no lo aceptes por fe — ejecútalo). Dado que el código de guarda en sí es demostrablemente el mismo, el resultado de Ruby se transfiere sin necesidad de un arnés redundante específico para PHP.

Qué queda abierto

  • Binding de C# — código puramente gestionado, no basado en upb (JsonParser / CodedInputStream con su propio manejo de RecursionLimit). Genuinamente sin probar; este repositorio aún no lo cubre.
  • Otras clases de bugs en este mismo núcleo de upb no están probadas: confusión del registro de extensiones, parsing de mini_table, la validación del utf8_range.c incluido.

Cómo reproducir esto

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

Requiere: gcc, protoc (apt-get install protobuf-compiler), python3, git. Compilado y verificado con gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 y libprotoc 3.21.12 — versiones distintas pueden comportarse de forma diferente; si tus resultados no coinciden con la tabla de arriba, eso son datos, no un bug en tu configuración. Averigua por qué antes de asumir que es un desajuste de herramientas.

Nota de procedencia

third_party/ (obtenido por fetch_source.sh) contiene el código fuente de protobuf de Google, con licencia Apache-2.0, fijado al commit de arriba. Nunca se hace commit en este repositorio — fetch_source.sh es el ancla de reproducibilidad en lugar de incorporar el árbol de código fuente de otro a este.

Descargar herramienta