JFrog(ジェイフロッグ)レポート:FFmpeg MagicYUVのPixelSmashにリモートRCEの脆弱性

JFrog(ジェイフロッグ)レポート:FFmpeg MagicYUVのPixelSmashにリモートRCEの脆弱性

JFrog(ジェイフロッグ)Security Researchは、FFmpegのMagicYUVデコーダーに重大な脆弱性を発見したと報告した。この脆弱性にはCVE-2026-8461が割り当てられ、CVSSスコアは8.8(高)だ。PixelSmashと呼ばれるこの脆弱性は、単一の悪意のあるメディアファイルを処理することで引き起こされるヒープ境界外書き込みとして説明されており、デモ環境では単純なクラッシュから確実なリモートコード実行へとエスカレートした。

開示された情報によると、この脆弱性は、デコーダーがサブサンプリングされたピクセルフォーマットの輝度スライス高さを色度行に変換する際の丸め誤差に起因する。攻撃者が制御するslice_heightの値が奇数の場合、切り上げによる丸め処理によってスライスごとに余分な色度行が書き込まれる。複数のスライスにわたってこの処理が行われると、割り当てられた色度バッファが1行分オーバーフローし、攻撃者が制御するバイトが隣接するヒープメタデータに書き込まれる可能性がある。この書き込みによって、FFmpegのlibavcodecにリンクするプレーヤー、サムネール作成ツール、トランスコーディングパイプライン、メディアサーバーがクラッシュすることが報告されている。

JFrog Security Researchによると、エクスプロイト開発では、ヒープ上のプレーンピクセルデータの直後に位置するAVBuffer管理構造が標的とされた。glibc mallocメタデータを保持し、NULL終端コマンド文字列をオーバーフロー領域に配置するペイロードを作成することで、書き込みによってAVBuffer.free関数ポインターとAVBuffer.opaqueが上書きされ、system(command)と同等の間接呼び出しが発生する可能性がある。研究チームは、Jellyfinメディアサーバー(自動ライブラリースキャン経由)とNextcloudインスタンス(ビデオプレビュープロバイダー経由)に対して、いずれも細工された約50KBのAVIファイル1つを用いてリモートコマンド実行を実証した。

この開示では、FFmpegが広く組み込まれているため、攻撃対象領域が広範囲に及ぶことが強調された。具体的には、デスクトッププレーヤー(mpv、Kodi)、ファイルマネージャーのサムネイル生成ツール(GNOME/KDE/XFCEで使用されるffmpegthumbnailer)、セルフホスト型メディアサーバー(Jellyfin、Emby)、クラウドトランスコーディングサービス、そしてlibavcodecを呼び出す多くのAI/MLパイプラインや前処理ツールなどが挙げられる。報告によると、テストではmpv、Kodi、ffmpegthumbnailer、Jellyfin、Emby、Nextcloud、Immich、PhotoPrism、OBS Studioでクラッシュや破損が確認され、JellyfinとNextcloudのプレビューワークフローに対して完全なリモートコード実行(RCE)が実証された。

検出ガイダンスが提供された。脆弱なデコーダーを確認するには、ffmpeg -decoders 2>/dev/null | grep magicyuvを実行する。出力にVFS..D magicyuvが表示された場合、FFmpegビルドは脆弱であると報告される。MagicYUVデコーダーは、FFmpeg 9.0より前のアップストリームのFFmpegビルドおよびテスト済みのディストリビューションパッケージ(Ubuntu、Debian、Fedora、Arch、Alpine)でデフォルトで有効になっていることが確認されている。

すぐにアップグレードできない環境向けに、即時の緩和策が概説された。1つの方法は、./configure --disable-decoder=magicyuvを使ってデコーダーを無効にしてFFmpegを再構築し、その後make && make installを実行することだ。もう1つの方法は、libavcodec/magicyuv.cに7行の最小限のパッチを適用して、不正なslice_height値を拒否し、範囲外の状態を防ぐことだ。研究者らは、参照用のMagicYUVエンコーダーは整列されたスライス高さを出力するため、このパッチは悪意のある入力のみを拒否すると強調した。

このレポートでは、エクスプロイトの制約と考慮事項について説明されている。Jellyfin RCEのデモンストレーションでは、正確なヒープキャリブレーションとメモリー内のmallocチャンクヘッダーの保持が必要だった。概念実証は、決定論的アドレスに対してASLRが無効になっていることを前提としており、研究者らは、FFmpegのFlashSVデコーダーに、原理的にはASLRバイパスに連鎖できる未初期化メモリーの開示が追加で存在することを指摘したが、その連鎖は実証されていない。チームは、ライブヒープ状態をキャプチャーし、glibcの整合性チェックを通過できるように正確なチャンクメタデータをエンコードした、綿密に作成されたコンテナ ファイルを生成するGDBベースのキャリブレーションパイプラインを構築したと報告している。

実際の配信経路が強調され、その中にはゼロクリックシナリオも含まれていた。メディアサーバーの監視対象ライブラリーフォルダーへのトレントベースの配信は強力な経路として挙げられた。監視対象ディレクトリーに直接ダウンロードするように設定されたトレントクライアントは、細工されたファイルをJellyfinのライブラリーに配置し、ダウンロード以外のユーザー操作なしに自動的にffprobeスキャンと脆弱性をトリガーできる。Nextcloudや多くのNAS、メディア管理ワークフローにおけるプレビューとサムネイル生成についても、同様のゼロクリックまたはほぼゼロクリックのトリガーが指摘された。

研究者らは、この問題をサプライチェーンの脆弱性として捉えた。FFmpeg内部のコーデックデコーダーに単一のバグがあると、デコーダーごとのフィルタリングを行わずにlibavcodecを継承する数百もの下流プロジェクトに連鎖的に影響を及ぼす可能性がある。開示された情報によると、最小限のデコーダー許可リストでFFmpegをビルドしているプロジェクトはごく少数(Plexが例として挙げられている)であり、ほとんどのプロジェクトはデフォルトでMagicYUVを含むFFmpegのデフォルトビルドを出荷またはリンクしている。

その他の運用上の影響も指摘された。特に危険な障害モードとして、一部のデプロイメント(JellyfinとEmbyの例が挙げられている)でサイレントヒープ破損が報告された。これは、ヒープの整合性が損なわれているにもかかわらず、プロセスがコード0で終了し、明らかなエラーメッセージが表示されない場合だ。クラウドビデオ処理パイプラインのコスト増幅シナリオについても概説された。ジョブの失敗と自動再試行によって運用コストが増加する可能性があり、一般的なキューイングシステムにおける再試行予算と関連する増幅係数の例が示された。

メディアプレーヤー以外にも、サムネールやプレビューの生成、メタデータの抽出、AI/MLパイプライン(PyAV/OpenCVの使用、vLLM)、チャットプラットフォームのプレビューサービス、データセットの取り込み、分散データ処理フレームワークなど、広範な下流攻撃対象領域が列挙された。この開示では、信頼できない動画入力を扱うチームに対し、FFmpegの依存関係を監査し、パッチを適用し、修正版にアップグレードするか、必要ない場合はMagicYUVデコーダーを無効にするよう促している。

連携した情報開示活動と修正のタイムラインがまとめられた。脆弱性は2026年5月中旬にFFmpegセキュリティーチームに報告され、5月下旬から6月上旬にかけて複数の下流プロジェクトとメンテナーに通知された。FFmpegは2026年6月17日に修正版(8.1.2)をリリースし、2026年6月18日にCVEが公開され、2026年6月22日にJFrog Security Researchが勧告を公開した。勧告では、FFmpegとJellyfinのセキュリティーチームの迅速な対応に感謝の意が述べられていた。

システム所有者および管理者は、FFmpegをできるだけ早くパッチ適用済みのリリースにアップグレードするか、即時アップグレードが不可能な場合はMagicYUVデコーダーを無効にして再構築するよう強く推奨された。この勧告には、具体的な検出手順、再構築手順、および境界外書き込みを引き起こす不正なslice_height値を拒否するための最小限のパッチが含まれていると報告されている。

出典:JFrog

この製品の詳細については、JFrog製品ページをご覧ください。

You've successfully subscribed to DXable News
Great! Next, complete checkout to get full access to all premium content.
Welcome back! You've successfully signed in.
Unable to sign you in. Please try again.
Success! Your account is fully activated, you now have access to all content.
Error! Stripe checkout failed.
Success! Your billing info is updated.
Billing info update failed.
Dark Light