Appearance
SEC411 / CLAUDE-CURL-PERMISSION
SEC411 flags shared Claude settings when permissions.allow grants the exact wildcard permission Bash(curl:*).
Why It Matters
Granting blanket curl execution in a shared AI policy makes arbitrary network fetches part of the default team execution surface. That is a broad and easily copied permission shape for remote download workflows, even when the project does not need direct unrestricted curl access by default.
Trigger Shape
The rule triggers only when all of these are true:
- the file is a detected Claude settings surface
- the path is not fixture-like
permissions.allowcontains the exact stringBash(curl:*)
Clean Cases
These stay clean:
- more specific permissions such as
Bash(curl https://example.com/install.sh) - settings files that do not grant
curlat all - fixture-like examples under test or fixture paths
Example Trigger
json
{
"permissions": {
"allow": ["Bash(curl:*)", "Read(*)"]
}
}Safer Example
json
{
"permissions": {
"allow": ["Bash(curl https://example.com/install.sh)", "Read(*)"]
}
}How To Fix
Remove shared Bash(curl:*) permissions or replace them with a narrower reviewed command pattern that keeps direct network downloads under explicit user control.