Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
upb-any-recursion-audit — CVE-2026-0994のAny-unwrapping再帰バグクラスが、RubyおよびPHPのprotobufバインディングにおけるupbのCコアに影響を与えるかどうかを、ASan/UBSanペイロードを用いてテストする監査ハーネス。 | Kitploit
ツール/GitHubGitHub/vardhan0257/upb-any-recursion-audit
静的分析メモリフォレンジック脆弱性分析ファジングバイナリ解析論文と研究学習と教育
GitHubvardhan0257/upb-any-recursion-audit

upb-any-recursion-audit

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →

CVE-2026-0994のAny-unwrapping再帰バグクラスが、RubyおよびPHPのprotobufバインディングにおけるupbのCコアに影響を与えるかどうかを、ASan/UBSanペイロードを用いてテストする監査ハーネス。

リポジトリを見る
2時間29分前未レビュー
共有

upb Any再帰監査(Ruby / PHPバインディング)

protobufのPythonおよびJavaScriptバインディングで確認されたAnyアンラップ再帰CVE(直近ではCVE-2026-0994、json_format.pyの_ConvertAnyMessageにおける純粋なPythonのバグで、ConvertMessage()ではなくmethodcaller()を介して再帰し、深さカウンタを暗黙にスキップしていた)のフォローアップ。

疑問: RubyおよびPHPネイティブ拡張にバンドルされているC upbコアにも同じバグクラスが存在するか?

短い答え: いいえ。 JSONデコードパスとバイナリワイヤデコードパスの両方が、ここでテストされたすべてのケースで再帰制限を正しく適用している。これには1MBスタック上で実行された200,000レベルのストレスペイロードも含まれる。これは証拠を伴う反証された仮説であり、脆弱性ではない — 他の研究スレッドで反証された仮説を記録するのと同じように、ここにクリーンなネガティブ結果として記録する。

実際にテストされているもの

protobufのRubyおよびPHPネイティブ拡張は、共有ライブラリをリンクするのではなく、upbのCコアの単一ファイルアマルガメーション(ruby-upb.c、php-upb.c)をそれぞれベンダリングしている。この監査では、その正確なファイルをスタンドアロンCターゲットとしてビルドし — RubyやPHPランタイムは関与しない — / / / ディスクリプタでをブートストラップし、実際のデコーダエントリポイント(、)を敵対的ペイロードで直接駆動する。ASan/UBSan下で。

google.protobuf.Any
Struct
Value
ListValue
upb_DefPool
upb_JsonDecode
upb_Decode
パスガードデフォルト制限結果
JSONデコード、jsondec_any(Ruby)d->depth、jsondec_pushでチェック64反証 — 5000レベルペイロードでクリーンなエラー、バイトオフセットは約64レベルと正確に一致
バイナリワイヤデコード、upb_Decode(Ruby)Decode_LimitDepth100反証 — 60レベル境界ペイロードおよび200,000レベルストレスペイロードでクリーンなkUpb_DecodeStatus_MaxDepthExceeded、いずれも8MBスタックと1MBスタック(非メインRubyスレッドを近似)下で
PHPバインディング同じガード関数同じ同一性の証明による反証、別個の実行ではない — 以下を参照

いずれの実行でもASanまたはUBSan違反は観測されなかった。クラッシュ、ハング、スタック枯渇もなし。

PHPが別個に実行されなかった理由

php-upb.cとruby-upb.cは全体で約1,964行異なるが、jsondec_any、jsondec_push、およびワイヤ深さ制限定数は2つのファイル間でバイト単位で同一である(verify_php_identical.shがこれを証明する。信じるのではなく実行すること)。ガードコード自体が証明可能に同一であるため、Rubyの結果は冗長なPHP固有のハーネスを必要とせずに転用できる。

まだ未解決のこと

  • C#バインディング — 純粋なマネージドコードであり、upbベースではない(JsonParser / CodedInputStreamが独自のRecursionLimit処理を持つ)。真に未テストであり、このリポジトリはまだカバーしていない。
  • この同じupbコアにおける他のバグクラスは未テスト: 拡張レジストリの混乱、mini_tableパース、バンドルされたutf8_range.c検証。

これを再現する

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

必要なもの: gcc、protoc(apt-get install protobuf-compiler)、python3、git。gcc (Ubuntu 13.3.0-6ubuntu2~24.04.1) 13.3.0およびlibprotoc 3.21.12に対してビルド・検証済み — 異なるバージョンでは動作が異なる可能性がある。結果が上記の表と一致しない場合、それはデータであり、セットアップのバグではない。ツールの不一致と決めつける前に、その理由を突き止めること。

来歴に関する注記

third_party/(fetch_source.shによって取得)には、GoogleのApache-2.0ライセンスのprotobufソースが含まれており、上記のコミットに固定されている。これはこのリポジトリにコミットされることは決してない — 他人のソースツリーをこのリポジトリにベンダリングする代わりに、fetch_source.shが再現性のアンカーとなる。

ツールをダウンロード