Summary
lib/server.py binds the HTTP server to all interfaces by default:
srv = ReuseTCP(("", args.port), FeedbackHandler)
An empty bind address listens on 0.0.0.0, so anyone on the same Wi-Fi / LAN as the developer can reach the dev server.
Impact
Combined with the fact that SimpleHTTPRequestHandler serves the full artifact directory (including feedback/inbox.jsonl), any device on the same network can:
- Read the entire comment stream (
curl http://<dev-host>:5050/feedback/inbox.jsonl)
- POST arbitrary JSON to
/feedback, which the agent then ingests as user feedback during the next walkthrough
Most users running this skill on a laptop in a coffee shop / shared office / home network would not expect the comment endpoint to be reachable from other devices.
Suggested fix
- Default
--bind to 127.0.0.1
- Keep a
--bind flag for users who explicitly want LAN access (e.g. testing on a phone), and print a clear warning when bound to anything other than loopback
Summary
lib/server.pybinds the HTTP server to all interfaces by default:An empty bind address listens on
0.0.0.0, so anyone on the same Wi-Fi / LAN as the developer can reach the dev server.Impact
Combined with the fact that
SimpleHTTPRequestHandlerserves the full artifact directory (includingfeedback/inbox.jsonl), any device on the same network can:curl http://<dev-host>:5050/feedback/inbox.jsonl)/feedback, which the agent then ingests as user feedback during the next walkthroughMost users running this skill on a laptop in a coffee shop / shared office / home network would not expect the comment endpoint to be reachable from other devices.
Suggested fix
--bindto127.0.0.1--bindflag for users who explicitly want LAN access (e.g. testing on a phone), and print a clear warning when bound to anything other than loopback