Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-52617 — MCP ffmpegヘルパーにおけるOSコマンドインジェクションに関するアドバイザリと概念実証(PoC)。根本原因の分析、検出の指針、および未修正のnpmパッケージに対する緩和策を備えています。 | Kitploit
ツール/GitHubGitHub/s1ko/cve-2026-52617
脆弱性分析コード分析エクスプロイトサプライチェーンセキュリティ
GitHubs1ko/cve-2026-52617

CVE-2026-52617

MCP ffmpegヘルパーにおけるOSコマンドインジェクションに関するアドバイザリと概念実証(PoC)。根本原因の分析、検出の指針、および未修正のnpmパッケージに対する緩和策を備えています。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-52617 — @sworddut/mcp-ffmpeg-helper: ffmpeg ツールオプションを介した OS コマンドインジェクション

runFFmpegCommand は MCP ツールのパラメータから構築された文字列を spawn(…, { shell: true }) に渡すため、options、format、 codec、pixelFormat、extraOptions に含まれるシェルメタ文字が、サーバーを実行しているホスト上で実行されます。

⚠ 修正版は存在しません

2026-08-22 時点で最新の npm リリースは 0.2.1 であり、これが影響を受ける バージョンです。また、リポジトリのデフォルトブランチにも依然としてこのシンクが存在します。 アップグレード先はありません。その間ユーザーが取れる対策については 緩和策 を参照してください。

CVECVE-2026-52617
CWECWE-78 (OS コマンドに使用される特殊要素の不適切な中和)
パッケージ@sworddut/mcp-ffmpeg-helper (npm)
影響範囲0.2.1 以前 — 公開されているすべてのバージョン
修正版なし
CVSS v3.1AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 8.4 High (stdio トランスポート)。サーバーがネットワークトランスポートでラップされている場合は AV:N → 9.8 Critical。
報告者s1ko (github.com/s1ko, [email protected])
CVE 割り当て2026-07-13, MITRE CNA-LR

脅威モデル

MCP ツールの引数は攻撃者の影響を受けます。これらはエージェントが処理する コンテンツ — ドキュメント、Web ページ、ツールの出力 — から LLM によって生成されるため、 間接的なプロンプトインジェクションによって攻撃者がツールハンドラが受け取る値を 制御できるようになります。これらの値のいずれかをシェルに渡すハンドラは、 その影響を MCP サーバーを実行しているホスト上でのコード実行に変えてしまいます。これは 前例である aws-mcp-server / CVE-2026-5058 と同じモデルです。

メディア変換サーバーは、この攻撃にとって特に自然な標的です。処理を求められる ファイルは、まさにエージェントが他の場所から取得する信頼できないコンテンツだからです。

実行

src/utils/ffmpeg.ts — コマンドは文字列として組み立てられ、シェルが 明示的に有効化されています:

function runProcess(command: string, args: string[], useShell = false) {
  const child = spawn(command, args, { shell: useShell, windowsHide: true });
  …
}

export async function runFFmpegCommand(command: string): Promise<string> {
  const { stdout, stderr, code } = await runProcess(`ffmpeg ${command}`, [], true);
  …
}

spawn("ffmpeg " + command, [], { shell: true }) は文字列全体を /bin/sh -c 経由で実行します。呼び出し元が command に寄与したものはすべてシェル構文です。

src/tools/handlers.ts は3つのツールからこのヘルパーに到達し、内容が一切検証されない パラメータを補間します:

ツール注入可能なパラメータ
convert_videooptions
extract_audioformat
create_video_from_imagescodec、pixelFormat、extraOptions

チェックされるのは inputPath と outputPath のみであり、Zod スキーマは型(z.string())を 検証するだけで内容は決して検証しません — そのためメタ文字はそのまま通過します。

options を ; touch /tmp/marker ; に設定した convert_video 呼び出しは次を生成します:

/bin/sh -c "ffmpeg -i /tmp/in.mp4 ; touch /tmp/marker ; /tmp/out.mp4"

再現手順

poc/driver.mjs は stdio 経由で MCP を話します。サーバーを初期化し、注入された options 値を用いて convert_video に対する tools/call を1回発行し、マーカーファイルの有無を確認します。ペイロードは無害な touch です。

npm pack @sworddut/[email protected]
tar xf sworddut-mcp-ffmpeg-helper-0.2.1.tgz && cd package && npm install
node ../poc/driver.mjs

影響を受けるバージョンで想定される出力:

==== POC RESULT (@sworddut/mcp-ffmpeg-helper) ====
marker /tmp/PWNED_ffmpeg created: true
verdict: CONFIRMED — command injection executed

ffmpeg はインストールされている必要はありません。先頭のバイナリが解決できるかどうかに関係なく、注入されたコマンドは同じ /bin/sh -c 文字列内で実行されます。 2026-06-01 に隔離されたコンテナで検証され、2026-06-13 に再検証され、2026-08-22 にデフォルトブランチでシンクが存在することが再確認されました。テストを許可されているインフラストラクチャに対してのみ実行してください。

検出

  • ;、&&、||、|、バッククォート、または $( を含む ffmpeg コマンドライン。 このサーバーからの正当な ffmpeg 呼び出しには含まれません。
  • コマンドラインが ffmpeg で始まり、区切り文字の後に2番目のコマンドを含む sh -c プロセス — アプリケーションのログに依存しないプロセスツリーのシグナル(auditd、eBPF、Falco、EDR)。
  • MCP サーバープロセスの予期しない子プロセス。ffmpeg と ffprobe は想定内ですが、シェル、インタープリタ、ネットワーククライアントは想定外です。
  • サーバーはすべての呼び出しを stderr に Running FFmpeg command: ffmpeg <command> として記録します。ログが収集されている場合、注入された値を発見する最も簡単な場所です。
  • options、format、codec、pixelFormat、または extraOptions にシェルメタ文字が含まれる MCP ツール呼び出しログ。

MITRE ATT&CK T1059.004 Command and Scripting Interpreter: Unix Shell。

緩和策

パッチ済みリリースは存在しないため、選択肢は封じ込めと削除です:

  • パッケージの使用を停止する — それが提供するエージェントが信頼できないコンテンツを処理する場合。これは現在利用可能な唯一の完全な緩和策です。
  • どうしても残す必要がある場合は、コンテナまたは VM 内で非特権ユーザーとして実行し、メディア作業ディレクトリ以外は読み取り専用ファイルシステムとし、環境に認証情報を含めず、ネットワークエグレスを遮断してください。そうすればコード実行は攻撃者にホストではなくサンドボックスを与えるだけになります。
  • ネットワークトランスポート経由で公開しないでください。stdio のみのデプロイが、これを 9.8 ではなく 8.4 に保っている理由です。
  • 上記の5つのパラメータが runFFmpegCommand に到達する前にシェルメタ文字を拒否するよう、サーバーをラップまたはフォークしてください。

上流の修正は、shell: true を削除し、ffmpeg に引数ベクターを渡すことです — spawn("ffmpeg", ["-i", inputPath, …]) — その配列を自由形式の文字列ではなく、許可リストに登録された format、codec、pixelFormat の値から構築します。Zod の型検証だけでなく、コンテンツ検証が根本的な要件です。

NIST SP 800-53r5 SI-10、OWASP ASVS v4 §5.3.8、CWE-78 緩和策 M1 および M2。

タイムライン

日付イベント
2026-05-29公開 tarball のソースレビューにより脆弱性を特定
2026-06-01隔離されたコンテナ内で MCP stdio 経由で動的に検証
2026-06-132台目のホストで再検証。リポジトリには Private Vulnerability Reporting が有効になっておらず、package.json の repository/bugs/homepage フィールドは github.com/yourusername テンプレートのままであるため、文書化されたセキュリティ連絡先が存在しない
2026-07-13MITRE CNA-LR が CVE-2026-52617 を割り当て、s1ko が発見者としてクレジットされる
2026-08-22デフォルトブランチでシンクを再確認。npm の最新版は依然 0.2.1。本記事を公開

参考資料

  • npm パッケージ — https://www.npmjs.com/package/@sworddut/mcp-ffmpeg-helper
  • リポジトリ — https://github.com/sworddut/mcp-ffmpeg-helper
  • MCP 脅威モデルの先例 — CVE-2026-5058(aws-mcp-server)

同じ調査パスからの関連アドバイザリ: CVE-2026-52616、 CVE-2026-52618。

ライセンス

MIT — LICENSE を参照してください。

ツールをダウンロード