Anthropic buffa ライブラリのゼロデイ脆弱性 CVE-2026-55407 が FIX:22 倍のメモリ増幅で DoS を誘発

Anthropic buffa Library Zero-Day Lets Attackers Trigger Memory-Amplification DoS

2026/07/01 gbhackers — Anthropic の Rust ベースの protobuf ライブラリ “buffa” に、ゼロデイのメモリ増幅型サービス拒否 (DoS) の脆弱性 CVE-2026-55407 が存在することが判明した。この脆弱性を悪用する攻撃者は、比較的少量の入力でシステム・メモリを枯渇させることが可能となる。AI を活用した静的アプリケーション・セキュリティ・テスト (SAST) エンジンを通じて、Endor Labs がこの問題を特定した。脆弱性 CVE-2026-55407 が浮き彫りにしたのは、メモリ・セーフなプログラミング言語におけるロジック上の欠陥が、依然として深刻なリソース枯渇を引き起こす可能性があることだ。

Anthropic の buffa ライブラリにおけるゼロデイ

この脆弱性は、buffa の未知フィールドのデコード・ロジックを担う decode_unknown_field 関数に存在する。本質的に Rust は、メモリ破損を防止する仕組みを備えているが、制御されないリソース割り当てを防ぐことはできない。今回のケースでは、攻撃者が制御する入力がヒープ割り当てサイズに直接影響を及ぼすため、過剰なメモリ消費が可能になってしまう。

buffa のバージョン 0.8.0 未満で、デフォルトの preserve_unknown_fields=true の設定を使用し、信頼できない protobuf メッセージをデコードする場合に、この脆弱性が発生する。Endor Labs の AI SAST エンジンが検出したのは、信頼できないワイヤ・データから解析された長さの値が、上限のないベクターの割り当てに使用されるデータ・フローである。

この “フラットな割り当て” パスでは、メモリ使用量が入力サイズの約 2 倍となるため、リソースが制約された環境では、それだけでも問題となり得る。しかし、さらに詳細な分析により、protobuf の “StartGroup” フィールドの処理内で、より深刻な増幅ベクターが確認された。

この 2 つ目の実行パスでは、デコーダがループ内でネストされた未知フィールドを処理し、動的に拡張されるベクターに対して、解析された各フィールドが追加される。テストでは、varint を表すわずか 2 バイトの最小入力要素ごとに、約 40 バイトのヒープ割り当てが発生した。その結果として、約 22 倍のメモリ増幅率に達するため、細工された 64 MB のペイロードによりアプリケーションは約 1.4 GB のメモリ割り当てを発生させる。それにより、中程度のリソースを割り当てた環境であっても、メモリ不足 (OOM) による終了を引き起こす可能性がある。

特に、この攻撃では入力サイズ制限を回避する必要がなく、増幅はデコード処理中に発生するため、リクエスト・サイズ制限などの従来の緩和策は無効化される。また、標準的な 4 MB の gRPC メッセージ上限を設定していても、悪意のリクエストが同時に送信されると、メモリが急速に枯渇する可能性がある。

そのため、この脆弱性は、高い同時実行性を持つサービス/ファイル取り込みパイプライン/厳格なランタイム・メモリ制御を備えていないシステムにおいて、きわめて危険である。脆弱なコード・パスは、Message::decode や decode_from_slice などのデフォルトのデコード API を介して到達可能であることから、この脆弱性の悪用において特別な条件は不要となる。

buffa を使用して信頼できない protobuf 入力を処理する、すべてのサービスが潜在的なリスクにさらされている。研究者たちが開発した PoC では、コンテナ化された環境において、わずか 256 MB のメモリ上限でもプロセスが終了する、再現性の高い OOM クラッシュが実証された。すでに Anthropic は、この開示に対応しており、研究者たちと協力して問題を検証しながら、さまざまなデプロイメント・シナリオにおける影響を評価している。

この脆弱性の CVSS v4.0 スコアは 6.3 (Moderate) である。しかし、研究者たちは、システム・アーキテクチャ/コンカレンシー/復旧メカニズムに応じて、実環境での深刻度は Medium から High の範囲となる可能性があると指摘している。したがって、監視が不十分なデプロイメントや単一インスタンス環境で悪用が繰り返されると、継続的なクラッシュ・ループや長期間にわたるサービス停止につながる可能性がある。

この問題は、buffa および connectrpc のバージョン 0.8.0 で修正されている。この修正では、メッセージごとに処理される、未知フィールド数に対する設定可能な上限が導入され、メモリ使用量の増加が効果的に抑制される。デフォルトでは、この上限により、メッセージごとの割り当てオーバーヘッドは約 40 MB に制限されている。

直ちにアップグレードできない開発者に推奨されるのは、preserve_unknown_fields=false を指定して protobuf コードを再生成することである。これにより、脆弱なコード・パス全体が無効化される。

この脆弱性は、より広範なセキュリティ上の教訓も浮き彫りにしている。メモリ安全性はリソースの安全性を保証するものではなく、Rust のような言語であっても、信頼できないデータを処理する際の上限のない割り当てロジックが、サービス拒否 (DoS) のリスクをもたらし得ることが判明した。また、この発見は、従来の静的解析では見落とされる可能性がある、複雑かつ多段階のデータ・フローの脆弱性を特定する上で、AI 駆動型セキュリティ・ツールの役割が、ますます重要になっていることも示している。