-
Notifications
You must be signed in to change notification settings - Fork 361
Description
Hi, thanks for creating this project. I'm interested in trying it, so I cloned the source code, threw it into Codex, and asked:
Examine this project and tell me whether it does what it says (in the README) and whether you find anything insecure that should concern me about running this in a separate user account and sandboxed (so dockerized)
I think this answer potentially indicates real issues:
Short answer: partially. The core architecture is real, but there are important README mismatches and at least one critical security issue.
Security Findings (highest risk first)
-
Critical: remote command injection via message text
Untrusted message content is interpolated into a shell command inexecSync(...)and only"is escaped, so shell expansions like$(...)can execute.
Reference:/Users/Shared/tinyclaw/src/queue-processor.ts:97 -
High: untrusted users can drive Claude with full local permissions
Incoming Discord/WhatsApp messages are forwarded to Claude with--dangerously-skip-permissions, and there is no sender allowlist. Any DM (Discord) or direct chat (WhatsApp) can trigger privileged actions inside the runtime account/container.
References:/Users/Shared/tinyclaw/src/queue-processor.ts:97,/Users/Shared/tinyclaw/src/discord-client.ts:129,/Users/Shared/tinyclaw/src/whatsapp-client.ts:140 -
Medium: Chromium sandbox explicitly disabled
WhatsApp Puppeteer runs with--no-sandboxand--disable-setuid-sandbox. In Docker this is common, but it increases impact if browser content is exploited.
Reference:/Users/Shared/tinyclaw/src/whatsapp-client.ts:69 -
Medium: plaintext secrets and chat snippets at rest
Discord token is stored in.tinyclaw/settings.jsonand copied to.env; logs include sender/message snippets.
References:/Users/Shared/tinyclaw/setup-wizard.sh:97,/Users/Shared/tinyclaw/tinyclaw.sh:108,/Users/Shared/tinyclaw/src/discord-client.ts:141,/Users/Shared/tinyclaw/src/whatsapp-client.ts:145
Does it match README?
- Mostly yes: Discord/WhatsApp clients, queue-based processing, tmux orchestration, and conversation continuity are implemented.
- Not accurate in key places:
- README says Discord supports “DMs and mentions”, but code ignores guild messages (mentions in servers).
References:/Users/Shared/tinyclaw/README.md:199,/Users/Shared/tinyclaw/src/discord-client.ts:130 - README says model switching works via settings, but queue processor reads
.tinyclaw/model(never written), not.tinyclaw/settings.json.
References:/Users/Shared/tinyclaw/README.md:166,/Users/Shared/tinyclaw/src/queue-processor.ts:17,/Users/Shared/tinyclaw/setup-wizard.sh:96,/Users/Shared/tinyclaw/tinyclaw.sh:501 - README documents
./tinyclaw.sh logs queue, buttinyclaw.shhas noqueuelog case.
References:/Users/Shared/tinyclaw/README.md:173,/Users/Shared/tinyclaw/tinyclaw.sh:397 - README says Node
v14+, but locked deps require Node>=18.
References:/Users/Shared/tinyclaw/README.md:49,/Users/Shared/tinyclaw/package-lock.json:893,/Users/Shared/tinyclaw/package-lock.json:2227
For your separate account + Docker plan
Running in a separate user and container helps, but as-is I would still treat this as unsafe against untrusted message senders until the critical injection and permission model are fixed.
If you must run now, isolate hard: non-root container, no privileged mode, no Docker socket, minimal/no host mounts, and strict outbound network limits.
I did a static audit (no live Discord/WhatsApp/Claude execution).
Sub-issues
Metadata
Metadata
Assignees
Labels
Type
Projects
Status