
docker cp コンテナからホストへの任意ファイル書き込みHackSpeak 配布ミラー。このリポジトリは Imperva レッドチーム(Ron Masas)が公開した CopyEscape PoC(CVE-2026-17106)の配布ミラーであり、コードはアップストリームと同一です。アップストリームには LICENSE が添付されていないため、配布の慣例に従い MIT License、Copyright (c) 2026 HackSpeak を採用しています。ソースコードの著作権は原作者に帰属します。
⚠️ セキュリティ研究および許可を得たテスト専用です。Linux デモは
/usr/bin/runcを上書きするため、使い捨て VM で実行し、検証可能なバックアップを事前に作成してください。許可を得ていない環境や本番環境では実行しないでください。
CopyEscape(CVE-2026-17106) は、Docker の docker cp(および Docker Sandboxes の sbx cp)におけるコンテナからホストへの任意ファイル書き込み脆弱性で、Imperva Red Team(Ron Masas)によって発見されました。
docker cp は直接のファイルシステムコピーではありません。daemon がコンテナのファイルシステム上で filepath.WalkDir を実行して tar アーカイブを生成し、CLI が tar を受信してクライアント側で展開・抽出します。addTarFile が再度 Lstat したときに symlink として認識され、tar ストリームに不整合なエントリ(symlink ヘッダーの後に「子ファイル」エントリ)が現れます。filepath.Join 後に構築されたパスに対して境界チェックを行いますが、実際の os.Symlink はチェックされていない元の hdr.Linkname を使用します(絶対パスを指すことが可能)。後続の子ファイル抽出時にカーネルがこの symlink を辿り、ユーザーが指定した対象外の場所に書き込みます。docker cp を実行したユーザーの権限でホスト上に任意の書き込み可能ファイルを作成・上書きできます。macOS ではシェル起動スクリプトや ~/Library/LaunchAgents を上書きして永続化できます。Linux では sudo docker cp で /usr/bin/runc を上書きでき、その後の Docker ライフサイクル操作によって root コード実行が可能になります。sudo docker cp を使用しないでください。2 つのデモ(テスト環境は公式と同一:Engine 29.6.1 / Desktop 4.81.0):
macOS(非破壊的、~/pwnd を作成)
cd macos
./demo-macos.sh
Linux(影響が大きい、/usr/bin/runc を上書き)
cd linux
# 按 linux/ 内说明构建镜像并运行;⚠️ 覆盖 runc 前务必备份
詳細な手順については、このリポジトリの
macos/およびlinux/サブディレクトリ内の説明ファイルを参照してください。
/usr/bin/runc)を上書きするため、使い捨て VM で実行し、バックアップを作成してください。docker cp — https://www.imperva.com/blog/copyescape-taking-over-docker-hosts-with-docker-cp/