Servers and applications
GHSA-gw29-hh29-xhfr
Member API key can list all containers and read logs of any container on the server via compose.readLogs
- Severity
- High
- Published
- 12 Nov 2026
- Last changed
- 12 Nov 2026
- Added to UpHeron
- 12 Nov 2026
- Fixed in
- 0.31.1
- Weakness
- Authorization bypass through a user-controlled key (IDOR) (CWE-639)Missing authorization (CWE-862)
- Sources
- Project advisories (GitHub)
Description
A user with the member role, restricted to a single project and service, can read the logs of any container on the same Docker host. That includes containers of other projects and Dokploy's own service containers. Two authorization gaps combine:
- compose.readLogs authorizes the caller against composeId, but never checks that containerId belongs to that compose.
- docker.getContainersByAppNameMatch only requires service: read, which every member has by default. It does not limit results to services the member can access, so it returns container ids and names for other projects.
Cross-project confidentiality break for any member, and for any API key or AI agent acting as one. Application logs often contain secrets, tokens, personal data and internal URLs, and Dokploy's own logs may expose platform details. This defeats per-project API keys as an isolation boundary for logs, even though settings, environment variables and deployments are correctly refused.
Affected software
| Software | Affected versions |
|---|---|
DokployServers and applications · github:dokploy/dokploy |
|
References
- GitHub Advisory Database https://github.com/advisories/GHSA-gw29-hh29-xhfr
- github.com https://github.com/Dokploy/dokploy/security/advisories/GHSA-gw29-hh29-xhfr