
EN: A lab reproduction of a vulnerability that bypasses Docker (Moby) authorization (AuthZ) plugins using an oversized (>1MB) request body.
| Item | Value |
|---|---|
| CVE | CVE-2026-34040 |
| CVSS 3.1 | 8.8 (High) — CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| CWE | CWE-288 (Authentication Bypass Using an Alternate Path or Channel), CWE-863 (Incorrect Authorization) |
| Affected | moby/moby < 29.3.1, docker/docker < 29.3.1, moby/moby/v2 < 2.0.0-beta.8 |
| Fixed in | 29.3.1, 2.0.0-beta.8 |
| Root cause | Incomplete fix for CVE-2024-41110 |
| Patch commit | moby/moby@e89edb1 |
EN: The official CVSS vector is
AV:L(Local). The rated scenario is a low-privileged user with local Docker API access (typically/var/run/docker.sock). This PoC uses the local UNIX socket only.
EN:
- A normal-sized privileged container-create request is blocked by the AuthZ plugin (HTTP 403).
- The same request padded beyond 1MB bypasses the AuthZ check.
- The bypassed request reaches the Docker daemon and creates a privileged container.
- With privileged + host bind mount, host file read and host command execution can be demonstrated.
EN: The CVE itself does not read
/etc/shadowor perform RCE directly. The vulnerability is the bypass of a Docker API request that AuthZ should block; the later steps (file read, chroot, command execution) are impact demos that abuse normal Docker/Linux features.
.
├── README.md
├── poc.py # Working PoC (local UNIX socket only)
├── requirements.txt # Python standard library only
├── LICENSE
├── lab/
│ ├── authz.rego # OPA policy: blocks privileged + host-root bind
│ └── daemon.json # Registers the AuthZ plugin
└── docs/
├── concepts.md # 개념 / Concepts
├── lab-setup.md # 환경 구성 / Lab setup
├── how-it-works.md # 동작 원리 / How it works (source-level)
├── usage.md # 사용법 / Usage
├── troubleshooting.md # 문제 해결 / Troubleshooting
└── references.md # 참고 / References
# 1) Pull the image used by the PoC
sudo docker pull alpine
# 2) Run the non-destructive bypass check
sudo python3 poc.py --mode check
Expected on a vulnerable target:
small request -> HTTP 403 (AuthZ blocks)
oversized request -> HTTP 201 or HTTP 404 (AuthZ bypassed; daemon processed it)
EN: A
404 No such imageis still evidence of bypass — the request passed AuthZ (not 403) and reached the daemon's image lookup. Pullalpinebeforehand to avoid confusion in a demo.
See docs/usage.md for full usage.
EN: Use only in an isolated lab you own or are explicitly authorized to test. Do not run against remote Docker APIs, third-party servers, production, or internet-exposed Docker endpoints. The impact-demo modes (
rce-proof,host-command,reverse-shell-local) require an explicit confirmation flag.
See docs/references.md.
| Condition | Required | Reason |
|---|
Local Docker API access (/var/run/docker.sock) | Yes | The PoC sends requests to the socket |
| AuthZ plugin enabled with a body-inspecting policy | Yes | The bypass target is the AuthZ check |
| Docker/Moby < 29.3.1 | Yes | Patched versions reject oversized bodies |
alpine image present locally | Recommended | Otherwise create returns 404 No such image |