Appearance
SEC491 / CLAUDE-PIPX-RUN-PERMISSION
SEC491 flags shared Claude settings when permissions.allow grants Bash(pipx run ...).
Why It Matters
pipx run resolves and executes packages on demand. In shared Claude settings, that turns mutable package execution into a default team capability instead of an explicitly reviewed action.
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 a string that starts withBash(pipx run
Clean Cases
These stay clean:
- reviewed alternatives such as
Bash(python -m black src) - settings without
Bash(pipx run ...) - fixture-like examples under test or fixture paths
Example Trigger
json
{
"permissions": {
"allow": ["Bash(pipx run black:*)", "Read(*)"]
}
}Safer Example
json
{
"permissions": {
"allow": ["Bash(python -m black src)", "Read(*)"]
}
}How To Fix
Replace shared Bash(pipx run ...) permissions with a pinned wrapper or a narrower reviewed command permission that does not grant mutable package execution by default.