atomic-agents-stack: Dashboard HTTP server path traversal allows arbitrary file read
High severity
GitHub Reviewed
Published
Jun 10, 2026
in
dep0we/atomic-agents-stack
•
Updated Aug 13, 2026
Description
Published to the GitHub Advisory Database
Aug 13, 2026
Reviewed
Aug 13, 2026
Last updated
Aug 13, 2026
The optional dashboard HTTP server (
atomic_agents/dashboard/serve.py) builds filesystem paths directly from the request path and serves them without a containment check. It is the only per-request untrusted-path site in the codebase that does not route through_io.safe_resolve_under. Literal../segments surviveurlparseandPathjoining, so a request can read files outside the intendedagents_root(including via the static branch).Impact: arbitrary file read. The default bind is loopback, but
--hostis an operator-settable documented flag; binding0.0.0.0exposes this to the LAN. Even on loopback it is reachable via DNS-rebinding from a browser or SSRF from a co-located service.Affected:
dashboard/serve.py(DashboardHandler.do_GET/_serve_file), all versions through 1.0.0.Fix: route every served path through
_io.safe_resolve_underagainst the intended root and return 404 onPathTraversalError; reject../separators early; optionally refuse a non-loopback--hostunless an explicit auth/allow flag is set (matchingserve/_app.py).References