ZeptoClaw: Path boundary checks bypass via symlink, TOCTOU, and hardlink
Workspace boundary enforcement currently has three related bypass risks. This issue tracks fixing all three in one pull request.
Workspace boundary enforcement currently has three related bypass risks. This issue tracks fixing all three in one pull request.
The generic webhook channel trusts caller-supplied identity fields (sender, chat_id) from the request body and applies authorization checks to those untrusted values. Because authentication is optional and defaults to disabled (auth_token: None), an attacker who can reach POST /webhook can spoof an allowlisted sender and choose arbitrary chat_id values, enabling high-risk message spoofing and potential IDOR-style session/chat routing abuse.
The email channel authorizes senders based on the parsed From header identity only. If upstream email authentication/enforcement is weak (for example, relaxed SPF/DKIM/DMARC handling), an attacker can spoof an allowlisted sender address and have the message treated as trusted input.
zeptoclaw implements a allowlist combined with a blocklist to prevent malicious shell commands in src/security/shell.rs. However, even in the Strict mode, attackers can completely bypass all the guards from allowlist and blocklist: to bypass the allowlist, command injection is enough, such as ;, $() etc. to bypass the REGEX_BLOCKED_PATTERNS, argument injection is enough, such as the python3 -P -c "…" to bypass the LITERAL_BLOCKED_PATTERNS, file name wildcards can do the …
zeptoclaw implements a blocklist to prevent dangerous commands running in android device shell, but this blocklist has several blocked commands with argements in the pattern literal, such as rm -f and rm -rf, this can be simply bypassed by using different orders for these arguments, such as rm -r -f or rm -fr etc.