Docker「CopyEscape」脆弱性、コンテナがホスト上の意図しないパスへ書き込み可能に

Dockerで高深刻度の脆弱性「CVE-2026-17106」が見つかりました。「CopyEscape」と名付けられたこの脆弱性を悪用すると、悪意のあるコンテナが、docker cpコマンドで指定したローカルの保存先の外側にファイルを作成したり、上書きしたりできる可能性があります。

この欠陥はコンテナからホストへのコピー処理に影響します。Docker CLIを実行するユーザーや自動化プロセスの権限で、コードが実行されるおそれがあります。

問題を発見したのは、Imperva Red Teamのリサーチャー、Ron Masas氏です。同氏はDockerのアーカイブ処理パイプラインに着目しました。docker cpは、コンテナのファイルシステムからホストのパスへ直接ファイルをコピーするわけではありません。Dockerデーモンが、要求されたコンテナ内のパスをtarアーカイブにまとめる仕組みです。

その後、Docker CLIがこのアーカイブをローカルシステム上に展開します。CopyEscapeは、攻撃者が制御するコンテナのファイルシステムと、ホスト側の展開処理との間にある信頼境界を悪用します。

攻略の手口は、アーカイブ作成時のTOCTOU(time-of-check/time-of-use)競合状態と、展開時に安全性を欠くシンボリックリンクの扱いを組み合わせたものです。

稼働中の悪意あるコンテナ内のプロセスは、Dockerがtarアーカイブを構築している最中にファイルシステム上のオブジェクトを書き換えられます。具体的には、同じパス名を最初はディレクトリ、その後はシンボリックリンクとしてアーカイブに記録させることが可能です。

Docker CLIがそのシンボリックリンクを経由して後続の子エントリーを展開すると、書き込み先がユーザーの指定したディレクトリの外へ誘導されてしまいます。

その結果、docker cp container:/path ./outputのような日常的なコマンドが、ホスト側での任意ファイル書き込みの足がかりに変わります。書き込みは、コンテナ内プロセスの権限ではなく、docker cpを実行したローカルユーザーの権限で行われます。

攻撃者は、そのアカウントが書き込める範囲にあるシェルプロファイル、SSH設定、ソースコード、ユーザーレベルの実行ファイル、クラウドの認証情報、永続化用の場所などを狙う可能性があります。

macOSでは、Docker Desktopユーザーへのリスクがとりわけ大きくなります。脆弱な展開処理は、データがDockerのLinux仮想マシンを通過した後、macOSホスト上のDocker CLIによって実行されるためです。

Impervaは実証により、攻撃者がユーザーの管理下にある起動ファイルや永続化用ファイルを上書きできることを示しました。被害者が後でターミナルを開いたり、影響を受けるアプリケーションを起動したりした時点で、コードが実行されます。

Linuxでは、特権を伴う作業でsudo docker cpやroot権限の自動化処理を使っている場合、影響がさらに深刻になります。Impervaの概念実証(PoC)では/usr/bin/runcを置き換えました。その後のDockerのライフサイクル操作で、攻撃者が用意した置き換え後のファイルがroot権限で実行されたということです。

この脆弱性だけでコンテナにroot権限を与えるわけではありません。ただ、ホスト側で特権を使ったコピー操作が行われていると、rootレベルのファイル上書きに必要な権限を攻撃者に与えてしまいます。

同じCVEは、サンドボックスからホストへファイルをコピーするsbx cpを使う際のDocker Sandboxesにも影響します。信頼できないサンドボックス環境から成果物を取り出すAIエージェントやコーディングエージェントのワークフローも、リスクにさらされます。

Dockerはこの問題を、docker container cpにおける保存先エスケープの欠陥と特定し、影響を受ける各製品向けに修正版を公開しました。

Dockerユーザーは、Docker EngineとDocker CLIをバージョン29.7.2以降に、Docker Desktopをバージョン4.86.0以降にアップグレードしてください。

Docker Sandboxes 0.38.0には、sbx cpに対応する修正が含まれています。根本原因であるmoby/go-archiveの問題は、バージョン0.3.0で修正されました。

更新を適用するまでの間、組織は、稼働中のコンテナ、信頼できないコンテナ、侵害されたコンテナから、重要な保存先へファイルをコピーしないようにしてください。docker cpを使う前にコンテナを停止すれば、今回の攻撃チェーンで悪用された稼働中のファイルシステムの競合を防げます。

セキュリティチームは、可能な限りCI/CDパイプラインからsudo docker cpを排除し、最小権限での実行を徹底することも求められます。不審なコンテナから成果物を取り出す場合は、使い捨ての仮想マシンか、隔離したアカウントだけを使うようにしてください。

CopyEscapeは、アーカイブの展開が重要なセキュリティ境界であることをあらためて示しました。コンテナが実行時には隔離されていても、ホスト側の特権ツールが攻撃者の制御するアーカイブの内容を展開すると、そのデータは危険なものになり得ます。

ANY.RUNは、脅威調査を効率化し手作業を減らすため、1万6,000を超えるSOCチームに導入されています。自社チームでの活用を検討する

翻訳元: https://cyberpress.org/docker-copyescape-vulnerability/

本記事は cyberpress.org の記事を翻訳・要約したものです。