Skip to content
Back to skills

Cloud Docker Api Abuse

DSecurity

Turn an exposed container daemon or an over-privileged container into host compromise — a Docker API on 2375/2376, a mounted docker.sock, or a privileged/`-v /:/host` container. Load when you find an open Docker/containerd socket, port 2375/2376, a container you can run images in, or you landed inside a container and want the host. Signals: 2375/tcp open, /var/run/docker.sock reachable, `docker` group membership, privileged container, host paths mounted in.

  • 20 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 22, 2026
ai-agentsgodockerapisecurity

Works with

  • cli
  • api

Security analysis

D42/100
  • mediumUses curl or wget to download content
  • criticalAccesses sensitive system or user directories
  • criticalAccesses sensitive system or user directories

Pro shows the line behind each finding and how to fix it

Scanned September 22, 2026

npx -y skills add NoorQureshi/SploitAgent --skill cloud-docker-api-abuse --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Cloud Docker Api Abuse?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Cloud Docker Api Abuse
[![Security: D — Skills Directory](https://www.skillsdirectory.com/api/skills/noorqureshi-cloud-docker-api-abuse/badge)](https://www.skillsdirectory.com/skills/noorqureshi-cloud-docker-api-abuse)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: cloud-docker-api-abuse
description: >
  Turn an exposed container daemon or an over-privileged container into host compromise — a Docker
  API on 2375/2376, a mounted docker.sock, or a privileged/`-v /:/host` container. Load when you
  find an open Docker/containerd socket, port 2375/2376, a container you can run images in, or you
  landed inside a container and want the host. Signals: 2375/tcp open, /var/run/docker.sock reachable,
  `docker` group membership, privileged container, host paths mounted in.
domain: cloud
type: technique
stability: learning
modes: [pentest, bugbounty]
severity: critical
owasp: [A05:2021-Security-Misconfiguration]
mitre: [T1610, T1611]
cwe: [CWE-16, CWE-284]
tools: [docker, curl, netexec]
schema_version: 1
---

# Docker / container daemon abuse

## When it applies
You can reach a container control plane you shouldn't: an unauthenticated Docker API on `2375/tcp`
(or `2376` without client-cert auth), a mounted `/var/run/docker.sock` inside a container you
control, membership in the `docker` group, or a privileged/host-mounted container. Any of these is
effectively root on the host. Complements `cloud-container-escape` (which focuses on kernel/runtime
breakouts); this one is about the daemon/socket as the vector.

## Why it works
The Docker daemon runs as root and will build/run any container with any mount you ask for. Anyone
who can talk to its API or socket can start a container that bind-mounts the host filesystem
(`-v /:/host`) or runs `--privileged` — then read/write host files, add a root user, or chroot in.
There's no privilege boundary between "can use the daemon" and "root on the host".

## Method
1. **Confirm the vector.**
   - Remote API: `curl http://<host>:2375/version` and `/containers/json` — a response = unauthenticated control.
   - In-container socket: `ls -la /var/run/docker.sock`; `docker` CLI or `curl --unix-socket`.
   - `docker` group: `id | grep docker`.
2. **Point the CLI at the daemon** (remote): `export DOCKER_HOST=tcp://<host>:2375` then `docker ps`.
3. **Mount the host and take root** — run a container bind-mounting the host root and act on it:
   ```
   docker run -v /:/host --rm -it alpine chroot /host sh
   ```
   From there: add a privileged user, drop an SSH key into `/root/.ssh/authorized_keys`, read
   `/etc/shadow`, or (Windows host) pull `NTDS`/SAM.
4. **Privileged-container escape** (already inside one): `--privileged` exposes host devices —
   mount the host disk (`fdisk -l` → `mount /dev/sdaN /mnt`) or abuse cgroups release_agent to run
   a command as root on the host.
5. **Pull secrets** from the daemon: image layers, env vars (`docker inspect`), and other containers'
   filesystems often hold credentials → pivot with `recon`/`cloud-*`.

## Gotchas
- **`2376` is usually TLS + client-cert** — if it rejects you without a cert, it's *not* the open one;
  `2375` is the plaintext/no-auth port to look for.
- **Read-only or restricted socket mounts** may allow listing but not `run` — check what verbs work
  before assuming full control.
- **Non-destructive by default** — creating containers/users changes host state; on bounty confirm
  RCE minimally (e.g. read a root-only file) and stop, per `reporting-triage-validation`.
- **Clean up** every container, image, and user you create.

## Verify success
Read or write a host-only resource from your mounted/escaped context (e.g. `/etc/shadow`, a file in
another user's home, or a root-owned path) — proving host-level access from the container plane.

## References
Docker Engine API docs; `docker.sock` escape write-ups; MITRE ATT&CK T1610/T1611. Kernel/runtime
breakouts: `cloud-container-escape`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…