Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
POC-CopyEscape-CVE-2026-17106 — CVE-2026-17106 (CopyEscape) の機能的な PoC: docker cp における TOCTOU レースにより、Docker ホストへの任意書き込みが可能になります。Docker ラボ + inotify モニター + LD_PRELOAD。macOS では無害、Linux では破壊的な亜種です。 | Kitploit
ツール/GitHubGitHub/686f6c61/poc-copyescape-cve-2026-17106
特権昇格コンテナセキュリティ脆弱性分析エクスプロイト学習と教育コンテナエスケープ敵対的攻撃ラボと実践

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有
GitHub
686f6c61/poc-copyescape-cve-2026-17106

POC-CopyEscape-CVE-2026-17106

CVE-2026-17106 (CopyEscape) の機能的な PoC: docker cp における TOCTOU レースにより、Docker ホストへの任意書き込みが可能になります。Docker ラボ + inotify モニター + LD_PRELOAD。macOS では無害、Linux では破壊的な亜種です。

リポジトリを見る
1312ヶ月前未レビュー

CopyEscape — CVE-2026-17106 の PoC

CopyEscape (CVE-2026-17106) の教育的な Proof of Concept。docker cp における TOCTOU 競合状態の脆弱性で、悪意のあるコンテナが Docker ホスト上に任意のファイルを書き込むことを可能にします。この脆弱性を発見・文書化した masasron 氏によるブログ記事 "CopyEscape: Taking Over Docker Hosts with docker cp" に触発されたものです。


目次

  1. 実行概要
  2. 法的通知
  3. 攻撃チェーンの構造
  4. 要件
  5. リポジトリ構成
  6. クイックスタートガイド
  7. エクスプロイトの検証
  8. オリジナルとの比較
  9. 緩和策
  10. クレジット
  11. ライセンス

実行概要

CVE-2026-17106 は、docker cp <contenedor>:<ruta> <destino> の際に Docker デーモンが生成する tar ファイルの展開処理における競合状態 (TOCTOU) の脆弱性です。Docker CLI 29.6.1 以前に影響し、29.7.0 以降で修正されています。このバグはデーモンではなく CLI (ホスト上での tar 展開) に存在します。

CopyEscape と名付けられたこの攻撃チェーンは、特別な権限を持たない実行中コンテナのみを起点として、攻撃者が以下を行えることを示します:

  1. LD_PRELOAD ライブラリを使って、コンテナ内でそれを開くあらゆるプロセスに対して、実際のディレクトリ /watched/file.txt/ を通常のファイルとして偽装する。このライブラリは open、openat、openat2、fopen、stat、lstat、fstatat、statx および 64 系の各バリアントをインターセプトする。
  2. 16 MiB の囮ファイル aaa.txt を維持し、デーモンが tar を生成するのに十分な時間をかけさせ、モニタが競合に勝てるようにする。
  3. inotify でデーモンのアクセスを監視し、競合ウィンドウの間に、escape/ サブディレクトリを、ロールバック付きの 2 つのアトミックな rename(2) によってホストのターゲットへの絶対 symlink (macOS では /Users/<usuario>、Linux では /usr/bin) に置き換える。
  4. 結果の tar には symlink escape と、それに続く子エントリ escape/<basename> が含まれる。脆弱な CLI はクライアント側で symlink を作成し、その 経由で 子エントリを展開するため、ユーザーが選んだ宛先の外に書き込む。

結果として、docker cp を実行するプロセスの権限でホスト上への任意ファイル書き込みが可能になります。Linux バリアントは /usr/bin/runc を上書きし、次回の docker run / exec でホスト上でのroot によるコード実行を達成します。


法的通知

このリポジトリには、厳密に教育・防御目的の資料が含まれています。

  • 目的: 教育、自身の監査、パッチ の検証を目的として攻撃チェーンを示すこと。
  • 許可される用途: 自分が所有するシステム、または明示的な書面による許可を得たシステムに対してのみ実行すること。
  • 禁止事項: 同意なしに第三者システムに対して使用すること。リポジトリの作者は、ここに含まれる資料の不正使用について責任を負いません。
  • 責任: 適用される法律 (スペインの LOPD/RGPD、米国の CFAA など) の遵守については、運用者が単独で責任を負います。
  • Linux バリアントはホストの runc を破壊します。検証済みのバックアップがある使い捨て VM でのみ使用してください。

この PoC には無害な macOS バリアント (~/pwnd をマーカーとして書き込む) が同梱されており、その唯一の目的は再現可能なデモンストレーションとして機能することです。


攻撃チェーンの構造

┌─────────────────────────────────────────────────────────────────────┐
│  1. LD_PRELOAD camufla /watched/file.txt como archivo regular       │
│     open/openat/openat2/fopen/stat/lstat/fstatat/statx → decoy       │
│     docker exec ... cat /watched/file.txt  →  "top-level file"       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  2. Layout real dentro del contenedor                               │
│     /watched/file.txt/                                               │
│     ├── aaa.txt            (16 MiB de 'B', cebo lento)               │
│     ├── escape/            (directorio real inicial)                 │
│     ├── escape/<basename>  (payload: runc o pwnd)                    │
│     └── .swap-escape       (symlink → /Users/<usr> o /usr/bin)       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  3. docker cp pide tar al daemon                                    │
│     daemon recorre /watched/file.txt/ y abre aaa.txt                │
│     inotify detecta IN_OPEN sobre aaa.txt                           │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  4. Monitor pivot: dos rename(2) atomicos con rollback              │
│     escape/ → .old-escape/   (backup)                                │
│     .swap-escape → escape/   (symlink al target del host)            │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  5. Tar resultante contiene:                                        │
│     escape → /Users/<usr>   (symlink absoluto)                       │
│     escape/<basename>        (entrada hija que atraviesa el symlink) │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  6. CLI vulnerable extrae symlink + hija                            │
│     crea escape → /Users/<usr> en el destino local                   │
│     extrae escape/<basename> A TRAVES del symlink                    │
│     escribe /Users/<usr>/<basename> en el host                       │
└──────────────────────────────────────────┬──────────────────────────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────┐
│  macOS: ~/pwnd con "COPYESCAPE_MACOS_DEMO"  (demo inocua)           │
│  Linux: /usr/bin/runc sobrescrito          (RCE como root)          │
└─────────────────────────────────────────────────────────────────────┘

要件

この PoC は macOS での実行を想定して構築されており、以下が必要です:

  • Docker Desktop 4.81+ が稼働していること (デーモンはどのバージョンでも可。バグは CLI にあります)。
  • curl、tar、git、docker が PATH に含まれていること。
  • 脆弱な CLI 29.6.1 (約 18 MB) とベースイメージ alpine:3.21 をダウンロードするためのインターネット接続。
  • HOME が /Users/<usuario> の形式であること。

macOS バリアントでは root は不要です。Linux バリアントでは root と使い捨て VM が必要です。

ランナー run-poc.sh は、Docker 公式サイト (download.docker.com) から脆弱な CLI 29.6.1 のバイナリを自動的にダウンロードします。システムの Docker Desktop インストールは変更しません。現在のデーモンを使用しますが、docker cp 操作にはダウンロードしたバイナリを呼び出します。


リポジトリ構成

POC CopyEscape (CVE-2026-17106)/
├── README.md                 ← Este archivo
├── LICENSE                   ← Licencia MIT
├── .gitignore
├── Dockerfile                ← Dockerfile unificado (macos | linux)
├── entrypoint.sh             ← Arranque del monitor sin LD_PRELOAD
├── monitor.c                 ← Monitor inotify unificado (una sola fuente)
├── watched_preload.c         ← LD_PRELOAD con cobertura ampliada
└── run-poc.sh                ← Runner robusto con reintentos

ディレクトリ cli-vulnerable/ (ダウンロードされた CLI 29.6.1) は .gitignore でリポジトリから除外されます。 ランナーは存在しない場合、自動的にダウンロードします。


クイックスタートガイド

1. PoC を実行する (無害な macOS バリアント)

cd poc-v2
./run-poc.sh

ランナーは次の処理を行います:

  1. 存在しない場合、脆弱な CLI 29.6.1 をダウンロードする。
  2. Docker イメージ copyescape-macos-pocv2:local をビルドする。
  3. COPYESCAPE_HOST_HOME=$HOME を設定した準備済みコンテナを起動する。
  4. コンテナ内で /watched/file.txt が読み取り可能になるのを待つ。
  5. 脆弱な CLI で docker cp を実行する。
  6. マーカー ~/pwnd の作成を検証する。

2. ランナーのオプション

./run-poc.sh 10         # 10 intentos (la carrera es probabilistica)
./run-poc.sh --cleanup  # 5 intentos y borra la imagen al final

3. 期待される出力

[run-poc] CLI vulnerable: 29.6.1
[run-poc] Intento 1/5 (contenedor copyescape-pocv2-NNNN-RRRR)
[run-poc]   /watched/file.txt lee: top-level file
[run-poc]   docker cp (CLI 29.6.1)...
[run-poc]   EXITO en intento 1: se creo /Users/<tu-usuario>/pwnd
  Contenido del marcador: COPYESCAPE_MACOS_DEMO
[run-poc]   Logs del monitor:
    [monitor] plataforma=macos target_dir=/Users/<tu-usuario> target_file=/Users/<tu-usuario>/pwnd quiet_ms=400 trigger=aaa.txt
    [monitor] pivoted /watched/file.txt/escape -> /Users/<tu-usuario>
[run-poc] Resumen: 1 exito en 1 intento(s).

4. クリーンアップ

rm -f -- "$HOME/pwnd"
rm -rf -- poc-v2/file.txt
docker image rm copyescape-macos-pocv2:local

エクスプロイトの検証

攻撃チェーンが完了すると、以下の要素が証拠となります:

ツールをダウンロード