FFmpeg セキュリティ分析: 自律エージェントによって発見された21件のゼロデイ脆弱性
Depthfirst は、特化した自律セキュリティエージェントを使用して FFmpeg における 21 件のゼロデイ脆弱性を特定しました。これらの発見には、いくつかの重大なメモリ破壊問題が含まれ、20 年以上潜在していたものもあり、AV1 RTP デパケット化モジュールにおけるリモートコード実行 (RCE) の実証済みエクスプロイトプリミティブも含まれます。
AI 主導の脆弱性発見
Depthfirst のセキュリティエージェントは、機能実装ではなく敵対的入力と脅威モデリングに焦点を当てる点で、標準的なコーディングエージェントとは異なります。システムは攻撃面をマッピングし、露出したパーサーを特定し、データフローを脆弱なシンクへと追跡します。理論的分析とは異なり、エージェントは具体的で再現可能な Proof‑of‑Concept (PoC) 入力を生成し、到達可能性と exploitable であることを確認します。
このアプローチは非常にコスト効果が高く、約 $1,000 で 21 件の脆弱性を発見しました—Anthropic の Mythos など他の高度なモデルを使用した同様の取り組みのコストの約 10% に相当します。
発見された脆弱性の概要
21 件の脆弱性は TS デマルチプレクサから VP9 デコーダまで、さまざまなコンポーネントにまたがります。8 件は CVE が割り当てられており、残りは Depthfirst が内部で追跡しています。
CVE 割り当て脆弱性
| CVE | 種類 | コンポーネント | 備考 |
|---|---|---|---|
| CVE-2026-39210 | ヒープバッファオーバーフロー | TS demuxer | 長さの境界チェックが欠如していた;2010 年に導入 |
| CVE-2026-39211 | 整数オーバーフロー | swscale | サイズ係数の式に上限が欠如していた;2010 年に導入 |
| CVE-2026-39212 | スタックオーバーフロー | ffmpeg_opt.c |
深さ制限なしの再帰的オプション解析;2025 年 7 月のリグレッション |
| CVE-2026-39213 | ヒープバッファオーバーフロー | yuv4mpegenc | パケットサイズに対する次元検証が欠如;2023 年に導入 |
| CVE-2026-39214 | スタックバッファオーバーフロー | SDT implementation | 残りスペースの追跡に失敗;2003 年から潜在 |
| CVE-2026-39215 | ヒープバッファオーバーフロー | update_mb_info() |
12 バイトのオーバーフローを許すロジックエラー;2012 年に導入 |
| CVE-2026-39216 | ヒープバッファオーバーフロー | img2enc.c |
次元由来サイズに上限がない;2012 年に導入 |
| CVE-2026-39217 | ヒープバッファオーバーフロー | VP9 decoder | タイルスレッドバッファの再割り当てが欠如;2025 年 3 月のリグレッション |
| CVE-2026-39218 | ヒープバッファオーバーフロー | DASH demuxer | 負の期間値を拒否できなかった;2017 年に導入 |
その他の注目すべき発見
- DFVULN-127 (ヒープバッファオーバーフロー): RTP AV1 デパケット化モジュールで発見;RCE プリミティブを可能にする。
- DFVULN-122 (ヒープバッファオーバーフロー): RTP MPEG-4 デパケット化モジュールで発見;2005 年から潜在。
- DFVULN-123 (整数オーバーフロー): RTP LATM デパケット化モジュールで発見;ヒープバッファを約 1 GB 超えて読み取ることが可能。
- DFVULN-120 (整数アンダーフロー): AVI デマルチプレクサで発見;約 2 GB の割り当てを引き起こし、サービス拒否 (DoS) を招く可能性がある。
詳細解析: AV1 RTP デパケット化モジュールにおける RCE
最も重大な発見の一つは libavformat/rtpdec_av1.c におけるヒープバッファオーバーフローです。この脆弱性は標準的な RTSP ストリームリクエスト (ffmpeg -i rtsp://attacker/stream) で到達可能で、特別なフラグやユーザー操作は不要です。
根本原因
脆弱性は Temporal Delimiter (TD) OBU の処理にあります。デパケット化モジュールは TD マーカーを無視して除去するよう設計されていますが、コードは av_grow_packet で対応するメモリを確保せずに、攻撃者が指定した obu_size 分だけ出力カーソル (pktpos) を進めてしまいます。
これにより、2 つの重大な失敗が発生します:
- 汚染された書き込みカーソル:
pktposが前方に進められるが、基底バッファは拡大されていない。 - 攻撃者制御のコンテンツ: 入力ポインタ (
buf_ptr) が進められないため、次のイテレーションで TD のバイト自体が新しい OBU として再解析され、攻撃者は汚染されたオフセットに書き込まれる内容を正確に制御できる。
攻撃経路
obu_size を 148 に慎重に調整することで、書き込みは pkt->data[148] から開始されます。FFmpeg の 64 バイトアラインメントにより、AVBuffer の bookkeeping 構造体がデータバッファ直後に配置され、AVBuffer.free 関数ポインタはオフセット 152 にあります。
特定の OBU ペイロードを作成することで、攻撃者は free ポインタを制御されたアドレスで上書きできます。バッファがその後解放される(再割り当てを強制する 3 番目の偽造 OBU によってトリガー)と、FFmpeg は破損した free ポインタを呼び出し、攻撃者に命令ポインタ (RIP) の制御権を与えます。
コミュニティの視点とセキュリティへの影響
これらの脆弱性の発見は、C で複雑なメディアフォーマットを解析する固有のリスクについて議論を呼び起こしています。
サンドボックスの必要性
多くのコミュニティメンバーは、信頼できないコンテンツを処理する際に FFmpeg をサンドボックス外で実行すべきではないと強調しています。
"Ffmpeg is absolutely not something you should be running outside of a sandbox if you're touching any untrusted or user-supplied content. I know that people do, and these people are taking unreasonable risks."
専門家は、メディアコーデックの複雑さから完全に安全に保つことがほぼ不可能であるため、VM や gVisor のようなツールを使用してプロセスを隔離することを推奨しています。
セキュリティにおける AI の役割
今回の発見は LLM の威力を示す一方で、一部の批評家は業界が報告に偏りすぎて修正が不足していると指摘しています。AI エージェントがバグレポートの提出を超えて、脆弱性を直接修正する pull requests (PRs) を生成し、オープンソースメンテナの負担を軽減すべきだという声があります。
メモリ安全性
バッファオーバーフローや整数アンダーフローの頻発は、メモリ安全言語に関する議論を再燃させます。いくつかの貢献者は、Rust や Go のように算術オーバーフローやメモリ境界を厳格に扱う言語であれば、これらの問題は存在しないか、容易に検出できると述べています。