Appearance
SEC405 / CLAUDE-PACKAGE-INSTALL-PERMISSION
SEC405 flags shared Claude settings when permissions.allow grants direct package installation commands.
Why It Matters
Package installation is a supply-chain mutation step. Granting it directly in shared Claude settings makes dependency installation authority part of the default team policy, which is harder to review and easier to cargo-cult than a narrower reviewed workflow.
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 one of these exact tokens:Bash(pip install)Bash(pip3 install)Bash(python -m pip install)Bash(yarn install)Bash(npm install)Bash(pnpm install)Bash(bun install)
Clean Cases
These stay clean:
- test or lint commands such as
Bash(yarn test:*) - settings files that do not grant package installation at all
- fixture-like examples under test or fixture paths
Example Trigger
json
{
"permissions": {
"allow": ["Bash(pip install)", "Read(*)"]
}
}Safer Example
json
{
"permissions": {
"allow": ["Bash(yarn test:*)", "Read(*)"]
}
}How To Fix
Remove shared package installation permissions or replace them with a narrower reviewed workflow that does not grant blanket package-manager installs in default team config.