Safeguard
AI Security•

Roo Code Auto-Approve Bypasses: Five CVEs and No Fixed Release Yet

Five CVEs show Roo Code's command allowlist can be tricked into auto-approving denied shell commands. VulnCheck lists no fix, so the mitigation is configuration.

Safeguard Security Team
5 min read

On 13 October 2026, VulnCheck published five CVEs, CVE-2026-110202 through CVE-2026-110206, for Roo Code, the open source AI coding agent that runs as a VS Code extension. Each one is a way to make Roo Code's command parser approve a shell command that the user's allowlist should have blocked. All five affect Roo Code through 3.54.0, and VulnCheck's advisories don't list a fixed version.

What's affected

Roo Code can auto-approve terminal commands that match an allowlist of prefixes, such as echo or git status. The parser decides what the "command" is, and the shell decides what actually runs. These CVEs are cases where the two disagree.

All five are rated CVSS 4.0 7.7 and CVSS 3.1 8.8, and all assume indirect prompt injection: text in a file, issue or web page that the agent reads and then acts on.

  • CVE-2026-110202: a bare redirect prefix makes getCommandDecision() match the redirect target, such as echo, while the shell runs the denied command.
  • CVE-2026-110203: the quote-masking regex in parseCommandLine() can be confused by escaped or single-quoted double quotes, hiding a command separator behind an allowlisted prefix.
  • CVE-2026-110204: a brace-style command substitution is treated as a parameter expansion. The NVD entry says this works on bash 5.3 and later or ksh93.
  • CVE-2026-110205: command substitutions placed next to the glob characters * or ? are discarded by the parser but still run by the shell.
  • CVE-2026-110206: a command substitution in command position passes an echo allowlist check, and the shell executes its output.

The shapes look like this. Each starts with something on the allowlist:

echo *$(DENIED_COMMAND)        # CVE-2026-110205 shape
$(echo DENIED_COMMAND)         # CVE-2026-110206 shape
echo ${ DENIED_COMMAND; }      # CVE-2026-110204 shape, bash 5.3+ or ksh93

VulnCheck credits Minqiang Gui and Siyu Lou on CVE-2026-110206. When we checked on 18 October, Roo Code's GitHub releases page showed 3.54.0, dated 15 May, as the latest release.

How to check if you're exposed

  1. Find installs. On each developer machine:

    code --list-extensions --show-versions | grep -i roo
    

    Any version at or below 3.54.0 is in scope.

  2. Check whether command auto-approval is on. The bypasses only matter if Roo Code is allowed to run commands without asking. Open Roo Code's auto-approve settings and look at command execution and the allowed commands list.

  3. Review the allowlist. Short, generic prefixes such as echo, cat or ls are exactly what these bypasses ride on.

  4. Check your shell. CVE-2026-110204 depends on bash 5.3+ or ksh93:

    bash --version | head -1
    

What to do now

There's no patched release to install, so the fix is configuration and containment.

  1. Turn off auto-approval for command execution in Roo Code. Approve each command by hand until a fixed version ships.
  2. If you must keep auto-approval, shrink the allowlist to full, specific commands and remove bare prefixes like echo. Note that CVE-2026-110206 and CVE-2026-110205 both pass with an echo prefix.
  3. Run the agent in a disposable environment, such as a dev container or VM without your cloud credentials, SSH keys or production tokens mounted.
  4. Limit what the agent reads. Indirect prompt injection needs a channel. Be careful pointing the agent at untrusted issues, pull requests from forks, or arbitrary web pages while it can run commands.
  5. Watch for a fixed release and test it against the patterns above before turning auto-approval back on.

Why it matters

Command allowlists in coding agents are text matchers sitting in front of a full shell language. Redirects, quoting, brace substitutions and globbing each give the shell another way to run something the matcher didn't see. Five CVEs from one parser in one disclosure is a sign of how wide that gap is.

This isn't unique to one tool. In September, Ollama's experimental agent mode got a CVE for the same class of bug, where control operators appended to an approved command bypassed the approval check. Any agent that approves commands by prefix is worth testing against these shapes.

The durable control is isolation. A prompt-injected command that runs in a throwaway container with no secrets does far less harm than one that runs in your home directory.

Try it yourself

Take your agent's current allowlist and try the three shapes above in a scratch container, replacing the placeholder with a harmless command like touch /tmp/bypass-test. Check whether the file appears. Then look at how unpatched issues like this get tracked from disclosure to fix.

Click through it at your own pace, or open it full screen.

Quick check

Am I affected if I approve every command manually?

These CVEs bypass auto-approval. If Roo Code asks you before running each command and you read it, the parser's mistake doesn't get a chance to run anything on its own.

Is there a fixed version?

VulnCheck's advisories list Roo Code through 3.54.0 as affected and name no fixed version. As of 18 October, 3.54.0 was the latest release on GitHub.

Why does an echo allowlist entry matter so much?

Several of these bypasses wrap the denied command inside or after an allowlisted prefix. A harmless-looking prefix like echo is enough for the parser to approve the whole line.

Sources

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.