Appearance
Why It Matters
SEC372 flags committed Claude settings files when permissions.allow contains the exact wildcard read grant Read(*).
This is useful because:
- shared
.claude/settings.jsonfiles often become team-wide policy by copy/paste Read(*)grants broad file read access instead of a reviewed allowlist- broad read access is much harder to defend in code review than scoped patterns tied to known repo paths
What Triggers
This rule applies only to committed Claude settings surfaces:
.claude/settings.jsonclaude/settings.json
It triggers when:
permissions.allowcontains the exact stringRead(*)
It does not trigger on:
- narrower reviewed patterns such as
Read(./docs/**) - fixture-like test/example paths
Examples
Bad:
json
{
"permissions": {
"allow": ["Read(*)", "Bash(git status)"]
}
}Better:
json
{
"permissions": {
"allow": ["Read(./docs/**)", "Bash(git status)"]
}
}Remediation
- replace
Read(*)with specific reviewed read patterns - keep shared read permissions scoped to the smallest set of repo paths the workflow actually needs