Executive brief
Omnigent is an autonomous AI agent framework that uses security policies to confine agent commands to approved operations (e.g., restricting Git pushes to allowed repositories and confining file access to a workspace). A flaw in the shell-command parser causes it to fail open: when the parser doesn't recognize a command syntax, it returns no decision, which the system interprets as approval. An attacker or misaligned agent can bypass repository and branch restrictions via command wrappers (timeout, nice, setsid), shell metacharacters (&, &&, ||, |), and command substitution, enabling exfiltration of code or secrets to unauthorized repositories or escape from workspace confinement.
Technical details
The vulnerability is an incomplete policy implementation (CWE-184) in the shared shell-command parser (`policies/builtins/_shell.py`). When a gated command uses syntax the parser does not recognize—such as combined interpreter flags (`bash -lc "..."`), unlisted command wrappers (`timeout`, `nice`, `setsid`, `stdbuf`), command substitution (`$(...)` or `` `...` ``), or unsplit shell operators (`&`, `&&`, `||`, `|`)—the parser returns `None` instead of a policy decision. The policy evaluator then treats `None` as "abstain," which defaults to ALLOW. This bypasses the two core guardrails: the GitHub repository/branch allowlist (in `github.py`) and workspace confinement (in `working_dir.py`). Attack preconditions are minimal: the agent must be instantiated with policy enforcement enabled, but no special authentication is required. Patch v0.3.0 is available and should implement fail-closed semantics, canonicalization of known wrappers, and recursive parsing of shell metacharacters and command substitutions.
Affected products
- omnigent-ai omnigent < 0.3.0
Timeline
- 2026-06-29: disclosed
- 2026-09-02: patched: patch version 0.3.0 released
- 2026-09-02: advisory: GitHub Advisory Database published