makeplane / makeplane/plane

Security: AIO Docker container runs all services as root (CWE-250)

Open
#8,849 1 comment 0 reactions 1 assignee View on GitHub

@akshat5302 is already working on this.

Since Apr 6, 2026.

Dominant language
TypeScript
Stars
59.6k
Forks
5.8k
Avg merge
1d 22h
Merged PRs (30d)
49

Description

Summary

The AIO community Docker image (deployments/aio/community/Dockerfile) runs all 7 processes (api, space, worker, beat, live, migrator, caddy) as root, violating the principle of least privilege.

Affected File

deployments/aio/community/Dockerfile

Details

Only the Caddy reverse proxy requires elevated privileges to bind ports 80/443. The remaining 6 services (api, space, worker, beat, live, migrator) use unprivileged ports (3000-3005) and have no need for root access.

CWE: CWE-250: Execution with Unnecessary Privileges

Suggested Fix Options

Option A: setcap + non-root user (recommended — no breaking changes)
RUN apk add --no-cache libcap &&     addgroup -g 1000 -S plane &&     adduser -u 1000 -S plane -G plane &&     chown -R plane:plane /app &&     setcap cap_net_bind_service=+ep /usr/bin/caddy
USER plane
  • Grants port-binding capability only to Caddy binary
  • All other services run unprivileged
  • No breaking changes for users (ports 80/443 preserved)
Option B: Unprivileged ports (breaking change)

Change Caddy to listen on :8080/:8443 and map externally via -p 80:8080.
Simpler but requires documentation and config updates.

I'm happy to submit a PR for Option A if the team prefers that approach. Leaving the design decision to the maintainers.


Discovered via automated security scanning.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.