Appearance
SEC488 / CLAUDE-UVX-PERMISSION
SEC488 flags shared Claude settings when permissions.allow grants Bash(uvx ...).
Why It Matters
uvx resolves and executes packages on demand. Giving that authority by default in committed team settings weakens reproducibility and expands supply-chain exposure for every user of the shared config.
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(uvx
Clean Cases
These stay clean:
- reviewed alternatives such as
Bash(uv run ruff check .) - settings without
Bash(uvx ...) - fixture-like examples under test or fixture paths
Example Trigger
json
{
"permissions": {
"allow": ["Bash(uvx ruff:*)", "Read(*)"]
}
}Safer Example
json
{
"permissions": {
"allow": ["Bash(uv run ruff check .)", "Read(*)"]
}
}How To Fix
Replace shared Bash(uvx ...) permissions with a pinned wrapper or a narrower reviewed command permission that does not grant mutable package execution by default.