Appearance
Why It Matters
SEC369 flags committed Claude settings files when permissions.allow contains the exact wildcard write grant Write(*).
This is useful because:
- shared
.claude/settings.jsonfiles often become team-wide policy by copy/paste Write(*)grants broad file modification power instead of a reviewed allowlist- broad write 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 stringWrite(*)
It does not trigger on:
- narrower reviewed patterns such as
Write(./artifacts/**) - fixture-like test/example paths
Examples
Bad:
json
{
"permissions": {
"allow": ["Write(*)", "Read(*)"]
}
}Better:
json
{
"permissions": {
"allow": ["Write(./artifacts/**)", "Read(*)"]
}
}Remediation
- replace
Write(*)with specific reviewed write patterns - keep shared write permissions scoped to the smallest set of repo paths the workflow actually needs