セキュリティ17分で読める

Docker脆弱性CVE-2026-34040——1リクエストでホスト全権奪取の衝撃

特別なエクスプロイトコードは不要。特殊な権限も必要ない。パディングを詰めた1つのHTTPリクエストを送るだけで、Dockerホストの全権を奪取できる——CVE-2026-34040はそんな悪夢のような脆弱性だ。

2026年3月25日、Docker社はDocker Engineの認証バイパス脆弱性CVE-2026-34040を修正したDocker Engine 29.3.1およびDocker Desktop 4.66.1をリリースした。CVSSスコアは8.8(High)。セキュリティ企業Cyera Researchが発見し、The Hacker NewsやeSecurity Planet等の主要セキュリティメディアが一斉に報じた。

本記事では、この脆弱性の技術的メカニズム、影響範囲、そして日本の開発現場が今すぐ取るべき対策を徹底解説する。

CVE-2026-34040とは何か

Docker AuthZプラグインの仕組み

まず、今回の脆弱性を理解するにはDocker AuthZ(Authorization)プラグインの仕組みを知る必要がある。

Dockerは、コンテナの作成・実行・削除といった操作をDocker APIを通じて行う。このAPIへのアクセス制御を担うのがAuthZプラグインだ。

AuthZプラグインの役割は以下の通りだ。

  1. リクエスト受信: クライアントがDocker APIにリクエストを送信
  2. ミドルウェア処理: Dockerのミドルウェアがリクエストを受け取り、AuthZプラグインに転送
  3. 認可判定: AuthZプラグインがリクエストの内容(ボディを含む)を検査し、許可または拒否を判定
  4. 実行: 許可された場合、Dockerデーモンがリクエストを処理

つまり、AuthZプラグインはDocker APIの「門番」だ。コンテナの特権モードでの起動やホストファイルシステムへのマウントなど、危険な操作を制限するために使われる。企業環境でDockerを運用する場合、このAuthZプラグインによるアクセス制御は重要なセキュリティ層となる。

攻撃の核心:ボディドロップのメカニズム

CVE-2026-34040の攻撃メカニズムは驚くほどシンプルだ。

問題の核心: DockerのミドルウェアがHTTPリクエストのボディサイズを処理する際、ボディが1MBを超えると、そのボディをドロップ(破棄)してしまう。しかし、AuthZプラグインにはボディが空の状態で転送される一方、Dockerデーモン自体は元の完全なボディを保持し、そのまま処理を続行する

この挙動がもたらす結果は壊滅的だ。

  1. 攻撃者が1MB以上のパディング(無意味なデータ)を付加したAPIリクエストを送信
  2. Dockerミドルウェアがボディをドロップ
  3. AuthZプラグインは空のリクエストを受け取る → 検査対象がないため「問題なし」と判断して承認
  4. Dockerデーモンは元の完全なリクエストボディを処理 → 特権コンテナの作成などの危険な操作が実行される

この図はCVE-2026-34040の攻撃フローを示しています。通常のリクエストではAuthZプラグインが正しく検査を行いますが、1MB超のパディング付きリクエストではボディがドロップされ、認証がバイパスされます。

CVE-2026-34040 攻撃フロー:通常リクエストではAuthZプラグインがボディを検査して不正操作を拒否するが、1MB超のパディング付きリクエストではボディがドロップされAuthZが空のリクエストを承認してしまう

なぜこれほど危険なのか

この脆弱性が特に危険とされる理由は3つある。

1. 攻撃の容易さ: 特別なエクスプロイトコードは一切不要だ。通常のHTTPリクエストにパディング(例えば1MB分のスペースやヌル文字)を追加するだけで攻撃が成立する。curlコマンド1行で再現可能とも報じられている。

2. 権限昇格の深刻さ: 攻撃者は特権コンテナを作成できるため、ホストOSのファイルシステムへのフルアクセス、ホストのネットワークスタック、カーネルモジュールの操作、他のコンテナへの侵入——実質的にホスト全体の完全な制御権を得ることになる。

3. 検知の困難さ: AuthZプラグインのログには「承認済み」と記録されるため、通常のセキュリティ監視では攻撃を検知できない可能性がある。正規のAPI操作と区別がつかないのだ。

CVE-2024-41110との関係:不完全な修正の代償

2024年の先行脆弱性

実はCVE-2026-34040は完全に新しい脆弱性ではない。2024年に公開されたCVE-2024-41110と深い関連がある。

CVE-2024-41110もDocker EngineのAuthZプラグインにおける認証バイパス脆弱性だった。Content-Lengthが0のAPIリクエストを送信すると、AuthZプラグインがボディなしのリクエストを承認してしまうというものだ。この脆弱性はDocker Engine v27.1.1で修正された。

修正が不完全だった理由

しかし、CVE-2024-41110のパッチは大きなHTTPリクエストボディの処理を適切にカバーしていなかった。Content-Lengthが0のケースは修正されたが、ボディが存在するものの1MBを超えるケースは見落とされていたのだ。

つまり、CVE-2026-34040はCVE-2024-41110の不完全な修正に起因するリグレッション(回帰バグ)だ。セキュリティパッチの品質と網羅性の重要さを改めて突きつける事例と言える。

過去のDocker重大脆弱性との比較

Docker Engineには過去にも複数の重大な脆弱性が報告されている。CVE-2026-34040を歴史的な文脈で理解するため、主要な脆弱性を比較する。

CVECVSS概要攻撃条件
CVE-2019-573620198.6runcコンテナ脱出悪意あるコンテナイメージ
CVE-2020-1525720205.2containerd host network namespace共有ホストネットワークモードのコンテナ
CVE-2024-2162620248.6runc process.cwdコンテナ脱出悪意あるDockerfile/イメージ
CVE-2024-4111020249.9AuthZバイパス(Content-Length: 0)Docker APIアクセス + AuthZプラグイン使用
CVE-2026-3404020268.8AuthZバイパス(1MB超ボディ)Docker APIアクセス + AuthZプラグイン使用

注目すべきは、CVE-2024-41110(CVSS 9.9)とCVE-2026-34040(CVSS 8.8)が本質的に同じ攻撃面(AuthZプラグイン)を標的としている点だ。同じ機能に対して繰り返し脆弱性が発見されるということは、この領域の設計そのものに構造的な問題がある可能性を示唆している。

影響範囲と修正バージョン

影響を受けるバージョン

CVE-2026-34040の影響を受ける条件は以下の2つを両方満たす場合だ。

  1. AuthZプラグインを使用している: AuthZプラグインを使っていない場合、この脆弱性は悪用できない
  2. 未修正のDocker Engineを使用している: Docker Engine 29.3.0以前のすべてのバージョンが対象

重要な点として、AuthZプラグインはデフォルトでは無効だ。しかし、企業環境やマルチテナント環境では、セキュリティポリシーの適用のためにAuthZプラグインを有効化しているケースが多い。つまり、セキュリティを強化しようとしてAuthZプラグインを導入した環境こそ、皮肉にもこの脆弱性の影響を受けることになる。

以下の図は、バージョン別の影響範囲と対策チェックリストを示しています。

CVE-2026-34040 対策チェックリストとバージョン別影響範囲:Docker Engine 29.3.1およびDocker Desktop 4.66.1で修正済み。即時・短期・中長期の対策一覧

修正バージョン

  • Docker Engine: 29.3.1(2026年3月25日リリース)
  • Docker Desktop: 4.66.1(同日リリース)

Docker社は全ユーザーに対して速やかなアップデートを強く推奨している。

一時的な緩和策

すぐにアップデートできない場合、以下の緩和策を検討すべきだ。

1. AuthZプラグインへの依存を見直す

AuthZプラグインを使っている場合、それが本当に必要かを再評価する。他のアクセス制御メカニズム(ネットワークレベルの制限、IAMポリシーなど)で代替できるのであれば、一時的にAuthZプラグインを無効化することでリスクを排除できる。

2. Docker APIアクセスの制限

Docker APIへのアクセスを信頼できるユーザーやプロセスに厳密に制限する。具体的には以下の対策が有効だ。

  • Docker ソケット(/var/run/docker.sock)のパーミッションを最小限に設定
  • TLS認証を有効化し、クライアント証明書によるアクセス制御を実施
  • ファイアウォールルールでDocker APIポート(デフォルト2376)へのアクセスを制限

3. ルートレスモードの導入

Dockerのルートレスモード(rootless mode)を使うことで、たとえコンテナからの脱出が成功しても、攻撃者が得る権限を非特権ユーザーに限定できる。ルートレスモードはDocker Engine 20.10以降で正式サポートされており、以下のコマンドでセットアップ可能だ。

dockerd-rootless-setuptool.sh install

ルートレスモードでは、Dockerデーモン自体が非root権限で動作するため、特権コンテナを作成されても影響が大幅に限定される。

4. ランタイム監視の強化

Docker APIへのリクエストサイズを監視し、異常に大きなリクエスト(1MB超)を検知するアラートを設定する。WAF(Web Application Firewall)やAPIゲートウェイを導入している場合、リクエストサイズの上限を設定することも効果的だ。

日本の開発現場への影響

国内Docker利用状況

日本のIT企業におけるDockerの普及率は極めて高い。特に以下の環境で広く使われている。

  • CI/CDパイプライン: GitHub Actions、GitLab CI、Jenkins等でのコンテナビルド
  • 開発環境の統一: docker-compose によるローカル開発環境の構築
  • 本番運用: Kubernetes(EKS、GKE、AKS)のコンテナランタイムとしてのDocker/containerd
  • SaaS開発: マイクロサービスアーキテクチャにおけるコンテナデプロイ

AuthZプラグインの利用実態

日本企業でのAuthZプラグインの利用率は、海外と比較すると低い傾向にある。個人開発者やスタートアップがAuthZプラグインを設定しているケースは稀だ。しかし、金融機関、通信事業者、大手SIerなどのエンタープライズ環境では、セキュリティコンプライアンスの要件からAuthZプラグインを導入しているケースが少なくない。

特に注意が必要なのは以下のケースだ。

  • マルチテナントDocker環境: 複数のチームや顧客が同一のDockerホストを共有する環境
  • Docker-in-Docker(DinD): CI/CDパイプラインでDockerコンテナ内からDockerを操作する環境
  • Docker APIを外部公開している環境: 管理ツールやオーケストレーターからリモートでDocker APIにアクセスする構成

日本特有のリスク

日本のIT現場特有のリスクとして、パッチ適用の遅さがある。変更管理プロセスが厳格な日本企業では、脆弱性が公開されてから本番環境にパッチが適用されるまでに数週間から数か月かかることがある。CVE-2026-34040のようにエクスプロイトが容易な脆弱性の場合、この「パッチラグ」は致命的なリスクとなる。

また、Dockerのバージョン管理が疎かになりがちな点も問題だ。開発環境で古いバージョンのDockerを使い続けているケースは珍しくない。docker versionコマンドで現在のバージョンを確認し、影響範囲に含まれるかどうかを即座にチェックすることが第一歩だ。

docker version --format '{{.Server.Version}}'

Kubernetes環境への波及

Kubernetes環境ではコンテナランタイムとしてcontainerdが主流となりつつあるが、Docker Engineを直接使っている環境やDocker APIを経由してコンテナを管理している構成では、この脆弱性の影響を受ける可能性がある。特にKubernetes 1.24以前でdockershimを使用している環境は要注意だ。

セキュリティパッチの品質について考える

CVE-2026-34040がCVE-2024-41110の不完全な修正に起因するという事実は、ソフトウェアセキュリティの難しさを象徴している。

パッチの網羅性が重要だ。特定の攻撃ベクトルを修正する際、類似の攻撃パターンも同時にカバーする必要がある。Content-Lengthが0のケースを修正したなら、極端に大きいボディのケースも検証すべきだった。境界値テスト、ファジングテストの重要性が改めて示された。

開発者として学ぶべきは、セキュリティ修正は「最小限の変更」ではなく「根本的な設計の見直し」が必要な場合があるということだ。AuthZプラグインへのリクエスト転送メカニズム自体に設計上の欠陥がある可能性を考慮し、ミドルウェアとデーモンの間でリクエストボディの整合性を保証する仕組みを導入すべきだったと言える。

まとめ:今すぐ取るべき3つのアクションステップ

CVE-2026-34040は、攻撃の容易さ(パディング付きHTTPリクエスト1つ)と影響の深刻さ(ホスト全権奪取)の組み合わせにおいて、Docker史上でも最悪クラスの脆弱性だ。以下の3ステップを今すぐ実行してほしい。

  1. バージョン確認と即時アップデート: docker versionコマンドで現在のバージョンを確認し、Docker Engine 29.3.1 / Docker Desktop 4.66.1以上にアップデートする。CI/CD環境やステージング環境も忘れずに確認する

  2. AuthZプラグインの棚卸し: 自社環境でAuthZプラグインを使用しているか確認する。docker infoコマンドでAuthorizationプラグインの欄をチェックし、使用している場合はアップデートの優先度を最高に設定する

  3. Docker APIアクセスの監査: Docker APIへのアクセス経路を洗い出し、不要なアクセスを遮断する。特にDocker ソケットの公開範囲、TLS設定、ネットワークレベルのアクセス制御を見直す。ルートレスモードの導入も並行して検討する

セキュリティ脆弱性は「自分には関係ない」と思った瞬間が最も危険だ。Dockerを使っている以上、バージョン確認だけでも今すぐ実行しよう。

この記事をシェア