You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Security: prevent host-file disclosure and scanner verdict bypasses #268
A local security review of commit a68496dc9220c78c3daa13cfb2f18036f1a79494 identified five high-severity issues. They allow a malicious skill, or an HTTP MCP caller, to disclose host data or obtain an incorrect SAFE verdict.
Findings
Symlink scope escape — build_context follows symlinks outside the selected skill root and reads their contents. Those contents can reach reports and configured LLM analysis.
Suggested fix: reject symlinks during discovery, or resolve every candidate path and require it to remain under the resolved scan root before reading. Apply the same rule to multi-skill and batch paths.
HTTP MCP local-path access — the HTTP scan_skill path forwards targets to local-path-capable input resolution, despite the README stating local paths are rejected over HTTP.
Suggested fix: make transport context explicit; reject local paths and file:// URLs for HTTP calls. Keep routable deployments behind authentication.
Codex CLI provider host reads — codex exec --sandbox read-only still allows model-initiated shell reads of absolute host paths. A hostile scanned prompt can induce reads despite a temporary CWD.
Suggested fix: do not use a tool-enabled CLI to analyze hostile content unless it runs in a filesystem-isolated sandbox; otherwise use a provider/transport with tools fully disabled.
Fenced SKILL.md bypass — the static runner drops findings near fenced Markdown, including executable instructions in SKILL.md. A no-LLM scan of a fenced privileged command returned SAFE with no findings.
Suggested fix: never treat fenced content in SKILL.md as automatically benign; restrict example suppression to trusted fixtures or explicit metadata.
Oversized-file bypass — static and YARA analyzers silently skip files above the size cap, allowing payload padding to evade detection while static mode can still return SAFE.
Suggested fix: chunk large files or mark scans with skipped executable content as incomplete/non-safe, with an explicit report limitation.
Validation
Full test suite: 1257 passed (with project-configured skips/xfails).
Local reproductions confirmed the symlink read, MCP local-path scan, Codex host-file read, fenced-instruction SAFE result, and oversized-file SAFE result.
Please consider treating this as a coordinated security report if public discussion is not appropriate.
Detailed local scan artifact: report.md generated by Codex Security.
Partial implementation: PR #276 addresses the fenced SKILL.md finding-retention bypass described in this security report and references this issue. Keeping the issue open because the report covers additional independent findings.
Status correction: the previously linked PR #276 was closed without merge. This report contains multiple independent security findings, and no currently open public PR covers the full scope, so it remains open.
Closing as completed after rechecking all five reported findings on merged main ef0f96d (2026-10-06).
Symlink scope escape: #369 and #393 reject unsafe paths and bound discovery; #595 also makes recursive omissions explicit.
HTTP local-path/file:// access: #196 rejects local targets for HTTP scans; #744 additionally restricts the unauthenticated listener to loopback.
Codex CLI host reads: #737 closes the remaining gap by reporting this provider unavailable and rejecting inference before spawning a subprocess. The read-only sandbox is not being treated as filesystem isolation.
Fenced SKILL.md finding loss: #393 retains deterministic findings instead of dropping them merely as examples/fenced text. The older unmerged fix(analyzer): retain fenced SKILL.md findings #276 is not the resolution evidence.
Oversized-file SAFE bypass: #393 and #509 provide bounded large-file inspection and explicit size-gap/incomplete reporting.
Fresh verification: 99 focused existing regressions passed, plus 3 additional checks passed for fenced/unfenced privileged SKILL.md instructions and a payload beyond the former static size cap. These were local offline checks; no live provider calls or malicious commands were executed. This closes the five findings in this report, not unrelated parser/provider follow-ups.
Activity
fix(analyzer): retain fenced SKILL.md findings (NVIDIA#268)
fix(analyzer): retain only fenced SKILL.md findings (NVIDIA#268)
fix(analyzer): scope SKILL.md exception to fenced blocks (NVIDIA#268)
rng1995 commentedon Aug 14, 2026
Partial implementation: PR #276 addresses the fenced SKILL.md finding-retention bypass described in this security report and references this issue. Keeping the issue open because the report covers additional independent findings.
rng1995 commentedon Sep 16, 2026
Status correction: the previously linked PR #276 was closed without merge. This report contains multiple independent security findings, and no currently open public PR covers the full scope, so it remains open.
rng1995 commentedon Oct 6, 2026
Closing as completed after rechecking all five reported findings on merged main
ef0f96d(2026-10-06).Fresh verification: 99 focused existing regressions passed, plus 3 additional checks passed for fenced/unfenced privileged SKILL.md instructions and a payload beyond the former static size cap. These were local offline checks; no live provider calls or malicious commands were executed. This closes the five findings in this report, not unrelated parser/provider follow-ups.