What Buttons does by design
When you press a button, Buttons runs a subprocess (shell, Python, Node) or sends an HTTP request. There is no sandbox around that execution. A button that containsrm -rf / will run rm -rf /. This is intentional — it is the core feature.
The security controls in Buttons are aimed at preventing unintended execution or escalation, not at sandboxing arbitrary code.
In-scope threats
Out-of-scope threats
- Malicious button specs: Buttons does not validate whether a button’s code is safe. If you import or run a button from an untrusted source, you are responsible for reviewing its contents.
- Privilege escalation: Buttons runs as the invoking user. It does not attempt to drop privileges. If your agent runs as root, buttons run as root.
- Side-channel attacks: Timing or memory side-channels are not in scope.
Assumptions
$PATHis trusted. Buttons resolvesbash,python3,node, and other non-POSIX interpreters by name. If an attacker can modify$PATH, they can substitute a malicious interpreter.~/.buttons/is user-private. The directory is created with mode0700. On shared systems, confirm yourumaskdoes not override this.- The button creator is trusted. Buttons does not distinguish between a button you created and one an agent created on your behalf. Both execute with your permissions.
Vulnerability reporting
If you find a security vulnerability in Buttons, please report it privately rather than opening a public issue. Preferred: Open a GitHub Security Advisory on the repository. This keeps the report private until a fix is released. Alternative: Email bobak@autono.co with the subject line[SECURITY] Buttons vulnerability report.
Please include:
- A description of the vulnerability and its impact
- Steps to reproduce
- The version of Buttons you tested against
- Any suggested mitigations if you have them
Related
- SSRF protection — private network blocking for HTTP buttons
- Template encoding — injection prevention in URL and body templates