Critical (P0)
Server binds to 0.0.0.0 (src/server/mod.rs:155) — The MCP server listens on all network interfaces, exposing the /run_command endpoint (which executes arbitrary shell commands) to anyone on the local network. Should bind to 127.0.0.1. This is a one-line fix.
AppleScript injection (src/server/commands.rs:59-63) — On macOS, command strings are interpolated into AppleScript with only " escaping. Crafted commands can break out and execute code via do shell script before the user approves anything.
High (P1)
Non-constant-time API key comparison (rest.rs:97, daemons.rs:146) — Uses != instead of constant-time comparison. Combined with #1, this enables remote timing attacks.
State files lack explicit permissions (lifecycle.rs:38-44) — API keys in ~/.ai-pod/*.json inherit the process umask, potentially world-readable on systems with umask 0022.
curl | bash installation (container.rs:24) — Claude Code installed via pipe-to-shell without integrity verification.
Medium (P2)
bypassPermissions in container — Claude runs with full permissions inside the container, which has the workspace mounted read-write.
Unpinned Docker images — FROM ubuntu:latest is non-reproducible and vulnerable to supply chain attacks.
No rate limiting on any server endpoint.
Server log created without restricted permissions.
Low (P3)
10-14. Binary download integrity, incomplete pipe rejection, daemon approval flow gaps, PID reuse TOCTOU.
The full analysis with code references and fix suggestions is in SECURITY_AUDIT.md, pushed to the branch.
1 step
Critical (P0)
High (P1)
Medium (P2)
Low (P3)
10-14. Binary download integrity, incomplete pipe rejection, daemon approval flow gaps, PID reuse TOCTOU.
The full analysis with code references and fix suggestions is in SECURITY_AUDIT.md, pushed to the branch.
1 step