High, CVSS 7.1PyPIAmendedPublished
LoopX serve-status permissive CORS policy exposes control-plane state and private Markdown files
CVE-2026-108372 · GHSA-vx2m-gpq4-8j5q
- Affected
- PyPI loopx >= 0.0.1, < 0.4.5
- Fixed in
- 0.4.5· Vendor fix available
- Issue
- loopx serve-status sends Access-Control-Allow-Origin: on every response, including its unauthenticated GET routes. Because the endpoint is unauthenticated and bound to a fixed, well-known loopback port, any website the operator visits can read LoopX control-plane state and the contents of Markdown files inside every registered goal repo, using a plain fetch() with no user interaction. The write endpoints are not affected — they are correctly Origin-checked. This report is strictly about the read paths. Impact While loopx serve-status is running, a page on any origin can run: and read back: GET /status.json — the whole status projection: goal ids, run history, and local absolute paths (registry, runtimeroot). With --global-registry this covers every project registered on the machine, not just one. GET /review-material?goalid=…&path=… — the content of any .md/.markdown file under a goal's repo root, state dir, or runtime dir. In practice that is the operator's private design…
Recommended action: Upgrade to 0.4.5 or later, then redeploy and verify.A vendor fix does not resolve your finding until you verify it in your own systems.