0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude Codeのdeny rulesが50コマンドで無効化される——hookで防ぐ方法

0
Last updated at Posted at 2026-04-12

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月に報告された実害:

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を参照。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?