Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
upb-any-recursion-audit — Harness di audit che verifica se la classe di bug di ricorsione Any-unwrapping CVE-2026-0994 influisce sul core C di upb nei binding protobuf di Ruby e PHP, con payload ASan/UBSan. | Kitploit
Strumenti/GitHubGitHub/vardhan0257/upb-any-recursion-audit
Analisi StaticaMemory ForensicsAnalisi delle VulnerabilitàFuzzingAnalisi di BinariPaper e RicercaApprendimento e Formazione
GitHubvardhan0257/upb-any-recursion-audit

upb-any-recursion-audit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →

Harness di audit che verifica se la classe di bug di ricorsione Any-unwrapping CVE-2026-0994 influisce sul core C di upb nei binding protobuf di Ruby e PHP, con payload ASan/UBSan.

Vedi Repository
2h 29m faNon ancora revisionato
Condividi

Audit sulla ricorsione di Any in upb (binding Ruby / PHP)

Seguito dei CVE confermati di ricorsione da unwrapping di Any nei binding Python e JavaScript di protobuf (più recentemente CVE-2026-0994, un bug puramente Python in _ConvertAnyMessage di json_format.py, che ricorreva tramite methodcaller() invece di ConvertMessage() e saltava silenziosamente il contatore di profondità).

Domanda: la stessa classe di bug esiste nel core C upb incluso nelle estensioni native Ruby e PHP?

Risposta breve: no. Sia il percorso di decodifica JSON sia il percorso di decodifica binaria wire applicano correttamente i loro limiti di ricorsione in ogni caso testato qui, incluso un payload di stress a 200.000 livelli eseguito con uno stack da 1MB. Questa è una ipotesi falsificata con evidenza, non una vulnerabilità — è registrata qui come risultato negativo pulito, allo stesso modo in cui registreresti un'ipotesi falsificata in qualsiasi altro filone di ricerca.

Cosa viene effettivamente testato

Le estensioni native Ruby e PHP di protobuf includono ciascuna un'amalgamazione in singolo file del core C di upb (ruby-upb.c, php-upb.c) invece di collegare una libreria condivisa. Questo audit compila esattamente quel file come target C standalone — nessun runtime Ruby o PHP coinvolto — inizializza un upb_DefPool con i descrittori google.protobuf.Any / Struct / Value / ListValue, e pilota direttamente i reali entry point del decoder (upb_JsonDecode, upb_Decode) con payload avversariali, sotto ASan/UBSan.

PercorsoGuardiaLimite predefinitoRisultato
Decodifica JSON, jsondec_any (Ruby)d->depth, controllato in jsondec_push64Falsificata — errore pulito a payload di 5000 livelli, offset in byte corrisponde esattamente a ~64 livelli
Decodifica binaria wire, upb_Decode (Ruby)Decode_LimitDepth100Falsificata — kUpb_DecodeStatus_MaxDepthExceeded pulito a payload di confine di 60 livelli e a payload di stress di 200.000 livelli, sia con stack da 8MB sia con stack da 1MB (approssimando un thread Ruby non-main)
Binding PHPstesse funzioni di guardiastessoFalsificata per prova di identità, non con un'esecuzione separata — vedi sotto

Nessuna violazione ASan o UBSan è stata osservata in alcuna esecuzione. Nessun crash, nessun blocco, nessun esaurimento dello stack.

Perché PHP non è stato eseguito separatamente

php-upb.c e ruby-upb.c differiscono complessivamente per ~1.964 righe, ma jsondec_any, jsondec_push e le costanti del limite di profondità wire sono identiche byte per byte tra i due file (verify_php_identical.sh lo dimostra, non fidarti sulla parola — eseguilo). Poiché il codice di guardia stesso è dimostrabilmente lo stesso, il risultato Ruby si trasferisce senza bisogno di un harness ridondante specifico per PHP.

Cosa resta aperto

  • Binding C# — codice puramente managed, non basato su upb (JsonParser / CodedInputStream con la propria gestione di RecursionLimit). Genuinamente non testato; questo repo non lo copre ancora.
  • Altre classi di bug in questo stesso core upb non sono testate: confusione del registro delle estensioni, parsing di mini_table, la validazione di utf8_range.c inclusa.

Riprodurre questo

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

Richiede: gcc, protoc (apt-get install protobuf-compiler), python3, git. Compilato e verificato con gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0 e libprotoc 3.21.12 — versioni diverse possono comportarsi diversamente; se i tuoi risultati non corrispondono alla tabella sopra, quello è un dato, non un bug nella tua configurazione. Scopri il perché prima di presumere che sia un disallineamento di tooling.

Nota di provenienza

third_party/ (recuperato da fetch_source.sh) contiene il sorgente protobuf di Google con licenza Apache-2.0, fissato al commit sopra. Non viene mai committato in questo repo — fetch_source.sh è l'ancora di riproducibilità invece di includere l'albero sorgente di qualcun altro in questo.

Scarica lo strumento