この記事ではセキュリティに特化して解説します。AIセキュリティ全般は サプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリスト をご覧ください。
Docker Engineに深刻な認可バイパス脆弱性、CVSS 8.8
Docker Engineに高深刻度の脆弱性CVE-2026-34040が公開された。CVSS 8.8。攻撃者がDocker APIへのアクセス権を持っている場合、AuthZ(認可)プラグインを完全にバイパスし、特権コンテナを作成してホストファイルシステムを掌握できる。
修正版はDocker Engine 29.3.1。影響を受けるのは29.3.1未満の全バージョンで、根本原因はDocker Engine 1.10(約10年前)から存在していた。
攻撃の仕組み ── 1MBの壁を悪用する
この脆弱性の核心は、Docker EngineのAuthZプラグイン連携におけるdrainBody関数にある。
drainBody関数はリクエストボディを読み取ってAuthZプラグインに渡す役割を持つが、ハードコードされた1MBのバッファ制限がある。攻撃者がリクエストボディを1MB超にパディングすると:
Peek()操作が空データを返す- Docker Daemonは空のボディをAuthZプラグインに送信
- 多くのAuthZプラグインは空ボディに対してデフォルトで「許可」を返す
- Docker Daemonは元の悪意あるペイロードをそのまま実行する
# 攻撃のイメージ(概念的なコマンド)
# 1MB超のパディングを含むコンテナ作成リクエスト
curl -X POST http://docker-host:2375/containers/create \
-H "Content-Type: application/json" \
-d '{"Image":"alpine","HostConfig":{"Privileged":true,"Binds":["/:/ host"]},"padding":"AAAA...(1MB超)..."}'
# AuthZプラグインには空ボディが渡され → 許可
# Docker Daemonは元のリクエストを実行 → 特権コンテナ作成
CVE-2024-41110の不完全な修正 ── 同じ問題が再発
この脆弱性はCVE-2024-41110の修正が不完全だったことが原因。2024年に発見された同じAuthZバイパスの修正パッチが、1MB超のリクエストボディに対する処理を正しくカバーしていなかった。
| CVE-2024-41110 | CVE-2026-34040 | |
|---|---|---|
| 発見年 | 2024 | 2026 |
| 原因 | AuthZに空ボディが渡される | 同上(修正漏れ) |
| 攻撃条件 | Content-Length 0のリクエスト | 1MB超のリクエストボディ |
| 修正 | Docker 27.1.1 | Docker 29.3.1 |
| CWE | CWE-187 | CWE-288 |
根本原因のコードは約10年前のDocker Engine 1.10から存在しており、長期間にわたって潜在的なリスクとなっていた。
影響範囲 ── 誰が危険か
| 環境 | リスク | 理由 |
|---|---|---|
| マルチテナントDocker環境 | 極めて高い | テナント間の認可制御がバイパスされる |
| CI/CDパイプライン | 高い | ビルドワーカーが特権コンテナを作成可能 |
| Docker APIを公開している環境 | 高い | ネットワーク経由で攻撃可能 |
| AuthZプラグイン未使用の環境 | 低い | AuthZを使っていなければ直接的影響なし |
| Flociのようなローカル開発環境 | 低い | ローカルでの開発利用では通常AuthZ不使用 |
今すぐ確認すべきこと
Step 1: バージョン確認
docker version --format ''
# → 29.3.1 未満なら脆弱
Step 2: 危険なコンテナの検出
# 特権コンテナの検出
docker ps --format ' ' | while read name status; do
priv=$(docker inspect "$name" --format '')
if [ "$priv" = "true" ]; then
echo "⚠️ 特権コンテナ検出: $name"
fi
done
# ホストファイルシステムマウントの検出
docker ps -q | xargs -I {} docker inspect {} \
--format ': → ' \
| grep -E "/:| /etc| /var/run/docker.sock"
Step 3: 修正
# Docker Engine 29.3.1にアップグレード
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install docker-ce=5:29.3.1-1~ubuntu.24.04~noble
# macOS (Docker Desktop)
# Docker Desktop → Check for Updates → 29.3.1以上に更新
パッチ適用が困難な場合の回避策
# Dockerデーモンソケットの権限制限
sudo chmod 660 /var/run/docker.sock
# user namespace remapping有効化(/etc/docker/daemon.json)
{
"userns-remap": "default"
}
# デーモン再起動
sudo systemctl restart docker
Docker 29.3.1での修正内容
修正コミット(e89edb1、3月25日)では以下が変更された:
- バッファ制限を1MBから4MiBに引き上げ
- fail-closedバリデーションを実装: ペイロードサイズ超過を検知した場合、AuthZプラグインに渡す前にリクエストを拒否
- 空ボディに対するデフォルト「許可」の動作を廃止
タイムライン
| 日付 | 事象 |
|---|---|
| 2024年7月 | CVE-2024-41110(同じAuthZバイパス)が公開・修正 |
| 2026年3月25日 | 修正コミット e89edb1 がマージ |
| 2026年3月31日 | CVE-2026-34040 割り当て、Docker 29.3.1リリース |
| 2026年4月2日 | セキュリティアドバイザリ公開 |
| 2026年4月7日 | 各メディアで報道開始 |
同日に発覚したaxiosサプライチェーン攻撃やClaude Codeソースコード流出と合わせて、2026年3-4月はインフラ・開発ツールのセキュリティインシデントが集中している。Grypeのようなコンテナ脆弱性スキャンツールを導入していれば、こうした脆弱性の早期検知が可能だ。
関連記事: サプライチェーンセキュリティ完全ガイド2026|攻撃手法・防御ツール・実践チェックリスト