
CVE-2026-34040のラボ再現:大規模(>1MB)なリクエストボディを使用して、ホストアクセス権を持つ特権コンテナを作成することで、Docker/Moby AuthZプラグインをバイパスします。
KO: Docker(Moby)の認可(AuthZ)プラグインを 1MB を超えるリクエストボディ でバイパスする脆弱性の実習用再現プロジェクトです。 EN: Docker(Moby)の認可(AuthZ)プラグインを 1MB を超えるリクエストボディ でバイパスする脆弱性のラボ再現です。
| 項目 | 値 |
|---|---|
| CVE | CVE-2026-34040 |
| CVSS 3.1 | 8.8(High)— CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-288(代替パスまたはチャネルを使用した認証バイパス)、CWE-863(誤った認可) |
| 影響を受けるバージョン | moby/moby < 29.3.1、docker/docker < 29.3.1、moby/moby/v2 < 2.0.0-beta.8 |
| 修正バージョン | 29.3.1、2.0.0-beta.8 |
| 根本原因 | CVE-2024-41110 の不完全な修正 |
| パッチコミット | moby/moby@e89edb1 |
KO: 公式 CVSS ベクトルは
AV:L(ローカル)です。つまり、評価シナリオは ローカル Docker API アクセス(通常は/var/run/docker.sock)を持つ低権限ユーザー です。この PoC もローカル UNIX ソケットのみを使用します。 EN: 公式 CVSS ベクトルはAV:L(ローカル)です。評価シナリオは ローカル Docker API アクセス(通常は/var/run/docker.sock)を持つ低権限ユーザー です。この PoC はローカル UNIX ソケットのみを使用します。
KO:
- 通常サイズの特権コンテナ作成リクエストは AuthZ プラグインによってブロックされる(HTTP 403)。
- 1MB を超えるパディングを含む同一リクエストは AuthZ チェックをバイパスする。
- バイパスされたリクエストは Docker デーモンの処理段階に到達し、特権コンテナを作成する。
- 特権 + ホストバインドマウントの組み合わせにより、ホストファイルの読み取りとホストコマンドの実行をデモできる。
EN:
- 通常サイズの特権コンテナ作成リクエストは AuthZ プラグインによってブロックされる(HTTP 403)。
- 1MB を超えるパディングを含む同一リクエストは AuthZ チェックをバイパスする。
- バイパスされたリクエストは Docker デーモンに到達し、特権コンテナを作成する。
- 特権 + ホストバインドマウントにより、ホストファイルの読み取りとホストコマンドの実行をデモできる。
KO: この CVE 自体は直接
/etc/shadowを読み取ったり RCE を実行したりはしません。脆弱性の本質は AuthZ がブロックすべき Docker API リクエストをバイパスすること であり、その後のステップ(ファイル読み取り、chroot、コマンド実行)は通常の Docker/Linux 機能を悪用した影響デモです。 EN: この CVE 自体は直接/etc/shadowを読み取ったり RCE を実行したりしません。脆弱性の本質は AuthZ がブロックすべき Docker API リクエストをバイパスすること であり、その後のステップ(ファイル読み取り、chroot、コマンド実行)は通常の Docker/Linux 機能を悪用した影響デモです。
.
├── README.md
├── poc.py # 実動 PoC(ローカル UNIX ソケットのみ)
├── requirements.txt # Python 標準ライブラリのみ
├── LICENSE
├── lab/
│ ├── authz.rego # OPA ポリシー:特権 + ホストルートバインドをブロック
│ └── daemon.json # AuthZ プラグインを登録
└── docs/
├── concepts.md # 概念 / 概念
├── lab-setup.md # 環境構築 / ラボ設定
├── how-it-works.md # 動作原理 / 動作原理(ソースレベル)
├── usage.md # 使用方法 / 使用法
├── troubleshooting.md # トラブルシューティング / トラブルシューティング
└── references.md # 参考 / 参考文献
KO: この PoC が意味をなすには、以下の条件がすべて必要です。 EN: 以下のすべてがこの PoC に必要です。
# 1) PoC で使用するイメージをプル
sudo docker pull alpine
# 2) 非破壊的なバイパスチェックを実行
sudo python3 poc.py --mode check
脆弱なターゲットでの期待結果 / 脆弱なターゲットでの期待される結果:
small request -> HTTP 403 (AuthZ がブロック)
oversized request -> HTTP 201 or HTTP 404 (AuthZ をバイパス; デーモンが処理)
KO:
404 No such imageもバイパスの証拠です。AuthZ がブロック(403)せず、Docker デーモンのイメージ確認段階まで到達したことを意味します。発表/デモでは混乱を避けるために事前にalpineをプルしておいてください。 EN:404 No such imageもバイパスの証拠です。リクエストが AuthZ を通り(403 ではなく)、デーモンのイメージ検索に到達したことを示します。デモでは混乱を避けるために事前にalpineをプルしてください。
完全な使用方法は docs/usage.md を参照。 / 完全な使用法は docs/usage.md を参照。
KO: 自分が所有する、または明示的に許可された隔離されたラボ環境でのみ使用してください。リモート Docker API、第三者のサーバー、本番環境、インターネットに公開された Docker エンドポイントに対して実行しないでください。影響デモモード(
rce-proof、host-command、reverse-shell-local)は明示的な確認フラグが必要です。 EN: 自分が所有する、または明示的に許可された隔離されたラボ環境でのみ使用してください。リモート Docker API、第三者のサーバー、本番環境、インターネットに公開された Docker エンドポイントに対して実行しないでください。影響デモモード(rce-proof、host-command、reverse-shell-local)は明示的な確認フラグが必要です。
docs/references.md を参照。 / docs/references.md を参照。
| 条件 | 必須 | 理由 |
|---|
ローカル Docker API アクセス(/var/run/docker.sock) | はい | PoC はソケットにリクエストを送信する |
| ボディ検査ポリシーが有効な AuthZ プラグイン | はい | バイパス対象は AuthZ チェック |
| Docker/Moby < 29.3.1 | はい | 修正版では巨大なボディを拒否する |
alpine イメージがローカルに存在すること | 推奨 | ない場合、作成時に 404 No such image が返る |