From 41490f572bd2c7c4b94fb453251acaeea09776cd Mon Sep 17 00:00:00 2001 From: Yuichi TSUNEMATSU Date: Thu, 20 Aug 2026 15:26:45 +0900 Subject: [PATCH] =?UTF-8?q?fix(claude):=20credentials=20=E3=81=AE=20deny?= =?UTF-8?q?=20=E8=AA=A4=E7=88=86=E3=81=A8=20mktemp=20=E3=81=AE=E5=A4=B1?= =?UTF-8?q?=E6=95=97=E3=82=92=E7=9B=B4=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #78 の設定を再起動後に実機で確認したところ、2つの問題が残っていた。 **credentials の deny が node_modules を巻き込む** ~/Repos 配下で `**/credentials` に該当する10件は、すべて node_modules 内の ディレクトリだった(@anthropic-ai/sdk, @azure/identity, @azure/storage-common のソース構成)。本物の認証情報は0件で、誤爆率100%。 これにより tree-walk するツールが途中で止まる。実測では `gofmt -l .` が終了コード 2 を返すため、フォーマット違反の検出と 権限エラーの区別がつかない状態だった。 拡張子つきの実在パターンに絞る。拡張子なしの `credentials` ファイルは 読めるようになるが、~/.aws や ~/.config/gcloud はディレクトリ単位で 別途 deny してあるため、実際に守りたい対象は落ちない。 **mktemp -d がサンドボックスで失敗する** macOS の mktemp は引数なしの場合 $TMPDIR を無視して confstr(_CS_DARWIN_USER_TEMP_DIR) すなわち /var/folders/*/*/T を使う。 ここが allowWrite に無いため mkdtemp が Operation not permitted になる。 自分で書くスクリプトは $TMPDIR を明示するので履歴上の発生はほぼ無いが、 このリポジトリの tests/pre-commit-hook.test.sh が mktemp -d を使っており ローカルでは TMP_BASE が空になって失敗する(CI では通る)。 OS のユーザ一時ディレクトリなので、$TMPDIR を許可しているのと同等のリスク。 **なお `**/secrets/**` は誤爆していなかった** dot_git-templates/secrets/ を塞いでいると疑ったが、実測では読めた。 `**/*.pem` が certifi の公開CAバンドルを塞ぐ件は確認したが、実際に 壊れた履歴が無く、絞ると server.pem のような命名を取りこぼすため 今回は手を入れない。 Co-Authored-By: Claude Opus 5 (1M context) --- dot_claude/settings.json | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/dot_claude/settings.json b/dot_claude/settings.json index a89449e..4fe95e2 100644 --- a/dot_claude/settings.json +++ b/dot_claude/settings.json @@ -67,7 +67,10 @@ "Read(**/.envrc)", "Read(**/.envrc.local)", "Read(**/secrets/**)", - "Read(**/credentials)", + "Read(**/credentials.json)", + "Read(**/credentials.yml)", + "Read(**/credentials.yaml)", + "Read(**/credentials.db)", "Read(~/.aws/credentials)", "Read(~/.aws/config)", "Read(~/.ssh/**)", @@ -122,11 +125,15 @@ "**/.envrc", "**/.envrc.local", "**/secrets/**", - "**/credentials", + "**/credentials.json", + "**/credentials.yml", + "**/credentials.yaml", + "**/credentials.db", "**/*.pem", "**/*.key" ], "allowWrite": [ + "/var/folders/*/*/T", "~/.npm", "~/.pnpm-store", "~/go/pkg",