Claude Codeのdeny rules(禁止ルール)に、深刻な脆弱性が見つかった。
50個以上のサブコマンドを連結すると、すべてのdeny rulesが無効化される。
Adversa AIの調査で判明した。内部的に50サブコマンドの上限があり、50を超えるとセキュリティチェックがスキップされて「ユーザーに確認」にフォールバックする。自律運行中(--dangerously-skip-permissions等)ではそのまま実行される。
何が起きるか
settings.jsonにこう書いてあるとする:
{
"permissions": {
"deny": ["Bash(rm *)"]
}
}
rm -rf /important-data は単体ではブロックされる。しかし:
true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; true; rm -rf /important-data
これはブロックされない。50個のtrue(何もしないコマンド)の後に危険なコマンドを置くだけで、deny rulesを完全にバイパスできる。
同時期に起きた実被害
この脆弱性と同じ4月に報告された実害:
- $1,446の無許可資金移動 — 取引所の全残高を勝手にスイープ
- $367損失+アカウント停止 — Claude生成スクリプトがAPI制限違反
- 物理座標を公開サイトにアップロード — CLAUDE.mdの「PII禁止」を17セッション無視
deny rulesを設定していても安全ではない。
パッチ状況
Anthropicはv2.1.90(4月6日リリース)でこの脆弱性を修正した。v2.1.90以上にアップデートしていれば、deny rules自体は正常に動作する。
ただし、deny rulesには構造的な限界がある:
- パターンマッチングに依存するため、コマンドの書き方を変えるだけで回避される可能性がある
- 新しいバイパス手法が見つかるたびにアップデートが必要
hookはdeny rulesの上位互換として、コマンドの内容を自由にスクリプトで検査できる。アップデートを待たずに自分で防御ロジックを書ける。
hookで防ぐ
PreToolUse hookはdeny rulesとは別の仕組みで動く。サブコマンド数の制限を受けない。
#!/bin/bash
# subcommand-chain-guard.sh
THRESHOLD=${CC_SUBCOMMAND_LIMIT:-20}
INPUT=$(cat)
CMD=$(echo "$INPUT" | jq -r '.tool_input.command // empty' 2>/dev/null)
[ -z "$CMD" ] && exit 0
SUBCOMMAND_COUNT=$(echo "$CMD" | tr ';' '\n' | tr '&' '\n' | tr '|' '\n' | grep -c '[^ ]' 2>/dev/null || echo 1)
if [ "$SUBCOMMAND_COUNT" -gt "$THRESHOLD" ]; then
echo "BLOCKED: Command contains $SUBCOMMAND_COUNT subcommands (limit: $THRESHOLD)." >&2
echo " Claude Code ignores deny rules after 50 subcommands." >&2
exit 2
fi
# 50個のtrue + 危険コマンドのパターンも検出
NOOP_COUNT=$(echo "$CMD" | grep -oE '\btrue\b|^:|;\s*:' | wc -l 2>/dev/null || echo 0)
if [ "$NOOP_COUNT" -gt 10 ]; then
echo "BLOCKED: Suspicious no-op padding detected ($NOOP_COUNT no-ops)." >&2
exit 2
fi
exit 0
settings.jsonに追加:
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "bash ~/.claude/hooks/subcommand-chain-guard.sh"
}]
}]
}
}
ワンコマンドで導入
cc-safe-setup(664個以上のhook)にこのhookが含まれている:
npx cc-safe-setup
個別にインストールする場合:
npx cc-safe-setup --install-example subcommand-chain-guard
キャッシュ破壊でトークンが数倍消費される問題
deny rulesバイパスだけでなく、git statusがキャッシュを壊す構造的問題も発見されている。Cache Breakage Fixで原因と対策をまとめた。
自分の環境が脆弱か確認する
Security Checkupで6つの質問に答えるだけで、deny rulesバイパスを含むClaude Codeの脆弱性を診断できる(無料)。
📖 トークン消費に困っているなら → Claude Codeのトークン消費を半分にする——800時間の運用データから見つけた実践テクニック(¥2,500・はじめに+第1章 無料)
📖 AIで事業を回す実体験を全記録 → Claude Code×個人事業 800時間の全記録(¥800・第2章まで無料)
⚠️ 新CVE公開(2026年4月): CVE-2026-21852でプロジェクト内の.claude/settings.jsonからAPIキーが窃盗される脆弱性が判明。npx cc-safe-setupはユーザーレベル設定のみを使用するため、この攻撃に免疫がある。詳細: Opus 4.7 Survival Guide(48問題追跡中)
⚠️ Opus 4.7をお使いの方へ(2026年4月)
Opus 4.7で安全分類器の不具合・トークン消費急増が報告されています。Safety Scannerで設定を無料チェック。対策はSurvival Guideを参照。