-
Notifications
You must be signed in to change notification settings - Fork 120
Description
Hey, love the project.
I tested some nuances in the Claude Code config file and figured you may benefit if you haven't considered these already. Original credit: https://www.petefreitag.com/blog/claude-code-permissions/
I found Pete's blog to be only partially true, perhaps claude updated something in the last 5 months. I tried only blocking read access to .aws but blocking both read and edit to .azure, along with the other Bash denies you guys have in the settings.json. The result: I couldn't edit existing files in .aws, but I could create new ones AND I COULD DELETE FILES in .aws, whereas I could not create new files or delete them in .azure. Here's a summary of my testing and findings:
Managed Settings I tested:
"deny": [
"Bash(rm -rf *)",
"Bash(rm -fr *)",
… (all copied verbatim)
"Read(~/.aws/**)",
"Read(~/.azure/**)",
"Edit(~/.azure/**)"
...
]
Output:
❯ okay now summarize everything very concisely
⏺ Security Testing Summary — managed-settings.json Permission Validation (Full Session)
We tested Read, Write, Edit, and Bash operations against credential-sensitive paths in the managed settings file, iterating through several configuration changes.
Findings:
- Edit is the umbrella rule — denying Edit on a path blocks Write (new files), Edit tool operations, and Bash commands on matching paths. No separate Write or Bash path-specific rules are needed.
~/.aws/**was missing Edit — the only path with only Read denied. This allowed new file writes and plain rm via Bash. Confirmed by successfully writing files and deleting~/.aws/credentialsduring testing.- Generic Bash deny rules don't close the gap —
Bash(rm -rf *)blocks recursive deletes but plain rm on individual files bypasses it entirely. Path-specific Bash rules are not a substitute for Edit. managed-settings.jsonis hot-reloaded — changes take effect immediately without restarting the session. (just a fun fact)
Conclusion: The correct and minimal fix is adding "Edit(~/.aws/**)" to the deny list. The generic Bash rules added are useful hardening but insufficient on their own — Edit(~/.aws/**) is still required to fully protect that directory.