Security
The controller's own exposure
What the controller holds, and what is deliberately not trusted.
The web UI is the interactive path, so the controller holds more than a provisioning service would.
- It can reach every workspace over SSH with a key that is on the controller and nowhere else. Anyone who reaches the controller reaches every live workspace.
- Auth is off unless
CONTROLLER_AUTH_SECRETis set. Without it there is no sign-in and no API key, and the only thing between the controller and a caller is the network it sits on. - The agent's screen is rendered as parsed spans, never as HTML. An agent echoes file contents, diffs, and whatever a prompt told it to print. Handing that to an HTML converter would let any repository script the controller's own origin, where the operator's session cookie lives.
sshdoes not preserve argument boundaries. It joins the command and the remote shell splits it again, so every argument is quoted before it leaves. Without that, a repository name or an agent prompt carrying a semicolon is remote code execution under the controller's key.
Last updated on