Security
What protects an instance, what an admin is, and where to report a problem.
Claiming the instance takes the host
The daemon starts with no account and a setup token in the data directory, printed by the installer. Without it whoever reached the page first would be the admin of your machine; with it, claiming the instance takes access to the host, which is what it always meant to require. The token is deleted the moment setup succeeds.
An admin is an admin of the machine
The daemon holds the Docker socket, which is root on the box by another name. An admin can build source on the host and manage users and grants. A member's default grants allow deploying published images, but not writing firewall rules or exposing databases. An admin can delegate those resource permissions explicitly.
How secrets are exposed
Account passwords use Argon2id; API keys and sessions are stored as hashes and cannot be read back. Stored provider credentials and the GitHub App's private key are not returned.
Database passwords and object-store keys can be read from their own credentials endpoints by a caller granted access to those secrets. Apps and external clients need the real values; normal list and detail responses do not include them.
What is on the network
- Every name arrives at the proxy over HTTPS with a Let's Encrypt certificate. Plain HTTP redirects.
- The instance's own network is private to its containers; between machines of a cluster it is encrypted.
- An exposed database or store is a plain port with no TLS. Its password and a firewall rule limit access, but traffic from an allowed client is unencrypted.
- The daemon's Postgres is on loopback only.
What leaves the box
Nothing but what you configured. See What reaches the internet.
Reporting a problem
Privately, following SECURITY.md, which also says what is not a vulnerability — an admin being able to do what an admin can do is the design.