Security model

Docker access remains an administrator permission.

Tracebag narrows what the browser can request and defaults to an operator-started session. Neither measure reduces the backend's authority while it is running.

Core warning: access to the Docker socket is effectively host-level access. Run Tracebag only on a host you control and never expose its plain HTTP port to an untrusted network.

What has Docker access

The browser never receives the Docker socket. The authenticated Tracebag backend uses it to inspect opted-in containers, pull approved runner images, and create, start, stop, and remove temporary runners. The browser cannot provide commands, image names, mounts, Docker flags, or output paths.

The socket is mounted with :ro, but that flag only protects the socket filesystem entry. It does not make Docker API operations read-only. A compromised Tracebag backend should be treated as a compromised Docker administrator.

Why sessions are the default

The published services do not restart automatically. Start Tracebag for an investigation and stop it afterward. This shortens the period in which the backend holds Docker access; it does not make that access less powerful while the session is active.

Stopping the stack removes the running Docker client. Named volumes remain and still contain sensitive authentication keys and diagnostic evidence.

Default protections

  • Tracebag binds to 127.0.0.1 and requires authentication by default.
  • Login work is size-bounded and rate-limited per client, while authenticated mutations require a CSRF token.
  • The application emits a reviewed CSP, frame denial, MIME-sniffing protection, a restrictive referrer policy, and HSTS over HTTPS.
  • Containers remain invisible until they carry the configured opt-in label.
  • The browser cannot submit shell commands, arbitrary Docker requests, image names, mounts, or output paths.
  • Diagnostic operations use fixed profiles with duration, concurrency, storage, and daily limits.
  • Temporary runners have networking disabled and are removed after the operation.
  • Full process dumps require a global switch, a target label, and exact per-request confirmation.

Diagnostic data is sensitive

Logs, traces, stack snapshots, GC dumps, full dumps, and incident exports can contain credentials, personal information, request data, and business secrets. Tracebag stores data locally, but the operator controls access, retention, backup, and deletion.

Remote access

Keep the application on localhost and terminate HTTPS through a trusted reverse proxy. The proxy route can remain configured while Tracebag is stopped. Trust forwarded headers only from the proxy's exact address or controlled network, restrict access at the network layer, and do not publish PostgreSQL.

Where this model fits

EnvironmentGuidance
Development machine or homelabSupported when you control the Docker host.
Trusted server behind HTTPS or a VPNSupported for a single trusted operator boundary.
Temporary production investigationReasonable when the host owner accepts the Docker-administrator boundary.
Direct public HTTP exposureNot supported.
Untrusted multi-user hostNot supported; Tracebag is not a tenant isolation boundary.

External services

Analysis runs locally. Tracebag does not send evidence to external analysis providers.

Report a vulnerability

Do not include real logs, traces, dumps, secrets, or customer data in a public issue. Use GitHub's private vulnerability reporting channel for the repository.

Report privately