Sploitus

Exploit for Path Traversal in Apache Http Server

githubexploit ยท 2026-08-11

Exploit Code

README261 lines
## https://sploitus.com/exploit?id=EA3E95E5-93C9-52DF-978D-44DD40B00972
# AI ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ๊ธฐ๋ฐ˜ CVE ๋ถ„์„ โ€” CVE-2021-41773

> **AI์—๊ฒŒ CVE ๋ถ„์„์„ ์‹œํ‚ค๊ณ , AI๊ฐ€ ๋‚ธ ์˜ค๋ฅ˜ 6๊ฑด์„ ์ „๋ถ€ ์žก์•„๋‚ด ์žฌ๋ฐœ ๋ฐฉ์ง€ ์ ˆ์ฐจ๋กœ ๋ฐ”๊พผ ๊ธฐ๋ก.**

Apache HTTP Server 2.4.49์˜ ๊ฒฝ๋กœ ์ •๊ทœํ™” ๊ฒฐํ•จ(CVE-2021-41773)์„ ๊ณต์‹ ์›๋ฌธ๋งŒ์œผ๋กœ ๋ถ„์„ํ•˜๊ณ ,
๊ทธ ๊ณผ์ •์—์„œ AI๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ๋žŒ์ด ๊ฒ€์ฆยท๊ต์ •ํ•œ ์ „ ๊ณผ์ •์„ Evidence๋กœ ๋‚จ๊ธด ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค.

**๊ฒฐ๋ก ๋ณด๋‹ค ๊ฒ€์ฆ ๊ณผ์ •์ด ์ด ์ €์žฅ์†Œ์˜ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.**

| | |
|---|---|
| ๊ธฐ๊ฐ„ | 2026-08-11 (D1) |
| ๋Œ€์ƒ | CVE-2021-41773 ยท Apache HTTP Server 2.4.49 ยท CWE-22 |
| ๋„๊ตฌ | Claude Code (Opus 4.8), manual approval mode |
| ๊ฒ€์ฆ | `D1 Gate = GO (exit 0)` ยท `tests 34/34` ยท `validate = GO` |
| ํ˜„์žฌ | D1 ์™„๋ฃŒ. D2(๋กœ์ปฌ Lab ์‹คํ–‰) / D3(๋ณด๊ณ ์„œยท์žฌํ˜„) ์ง„ํ–‰ ์˜ˆ์ • |

---

## 1. ์ด ์‹ค์Šต์˜ ๊ทœ์•ฝ

CVE 1๊ฑด์„ **D1(์ •์  ๋ถ„์„) โ†’ D2(๋กœ์ปฌ ๊ด€์ฐฐ) โ†’ D3(๋ณด๊ณ ยท์žฌํ˜„)** 3๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.
ํ•ต์‹ฌ ๊ทœ์•ฝ์€ ๋„ค ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

1. **AI ์ถœ๋ ฅ์€ Evidence๊ฐ€ ์•„๋‹ˆ๋‹ค.** AI๋Š” ์ดˆ์•ˆ๋งŒ ์ œ์•ˆํ•˜๊ณ , FACT ํ™•์ •์€ ์‚ฌ๋žŒ์ด ํ•œ๋‹ค.
2. **์‹คํ–‰์€ ์ •ํ™•ํ•œ `GO ` ๋’ค์—๋งŒ.** "์ง„ํ–‰ํ•ด", "์•Œ์•„์„œ ํ•ด"๋Š” ์Šน์ธ์ด ์•„๋‹ˆ๋‹ค.
3. **๋Œ€์ƒ์€ loopback์œผ๋กœ ์ œํ•œ๋œ๋‹ค.** `127.0.0.1` / `localhost` / ์ด ์ €์žฅ์†Œ๊ฐ€ ๋งŒ๋“  ๊ฒฉ๋ฆฌ Compose Service๋งŒ.
4. **์‹คํŒจยทREJECTEDยทUNKNOWN์€ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š”๋‹ค.** ์‹คํŒจ๊ฐ€ ๋‹ค์Œ ์‚ฌ์ดํด์˜ ๊ฐœ์„  ์žฌ๋ฃŒ๋‹ค.

๋ชจ๋“  ๋ฌธ์žฅ์€ **FACT / INFERENCE / UNKNOWN** ์…‹ ์ค‘ ํ•˜๋‚˜๋กœ ๋ถ„๋ฅ˜ํ•˜๋ฉฐ,
**๊ด€์ฐฐ ์—†์ด INFERENCE๋ฅผ FACT๋กœ ์Šน๊ฒฉํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€**ํ•ฉ๋‹ˆ๋‹ค.

ํŒ์ •์€ `npm run check -- D1|D2|D3` Gate๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ณ , ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” `GO=0 / REVISE=1 / STOP=2`์ž…๋‹ˆ๋‹ค.

> ์›๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ: [woo4826/security-wave-cve-harness-starter](https://github.com/woo4826/security-wave-cve-harness-starter)
> ์ด ์ €์žฅ์†Œ์—๋Š” **์ œ๊ฐ€ ์ž‘์„ฑํ•œ ๋ถ„์„ ์‚ฐ์ถœ๋ฌผ๋งŒ** ๋‹ด์•˜์Šต๋‹ˆ๋‹ค. Gate ์Šคํฌ๋ฆฝํŠธยทํ…œํ”Œ๋ฆฟ ๋“ฑ ํ”„๋ ˆ์ž„์›Œํฌ ์ฝ”๋“œ๋Š” ์›๋ณธ์— ์žˆ์Šต๋‹ˆ๋‹ค.

---

## 2. ํ•ต์‹ฌ โ€” AI๊ฐ€ ๋‚ธ ์˜ค๋ฅ˜ 6๊ฑด๊ณผ ๊ต์ •

D1 ํ•œ ์„ธ์…˜์—์„œ AI๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ์˜ค๋ฅ˜ 6๊ฑด์ž…๋‹ˆ๋‹ค. **์ „๋ถ€ ์‚ฌ๋žŒ์ด ์›๋ฌธ ๋Œ€์กฐ๋กœ ์žก์•˜๊ณ **,
๊ฐ๊ฐ์„ ์žฌ๋ฐœ ๋ฐฉ์ง€ ์ ˆ์ฐจ๋กœ ํ™˜์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋„ ๊ธฐ๋ก์€ [`sources/research-log.md`](sources/research-log.md)์— ์‚ญ์ œ ์—†์ด ๋ณด์กด๋ผ ์žˆ์Šต๋‹ˆ๋‹ค.

| # | AI๊ฐ€ ๋‚ธ ์˜ค๋ฅ˜ | ์–ด๋–ป๊ฒŒ ์žก์•˜๋‚˜ | ์ ˆ์ฐจ๋กœ ๋ฐ”๊พผ ๊ฒƒ |
|---|---|---|---|
| 1 | **์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ปค๋ฐ‹ ํ•ด์‹œ๋ฅผ ์ƒ์„ฑ** โ€” `eb294fabโ€ฆ` | ์›๋ฌธ Fetch โ†’ **HTTP 404** | ๊ณต์‹ raw ๊ฒฝ๋กœ๋กœ ์žฌํ™•์ธ ๋ชป ํ•œ ๊ฐ’์€ `UNKNOWN` ์œ ์ง€ |
| 2 | ๊ธˆ์ง€ ๋„๊ตฌ(`gh` CLI)๋กœ diff ์ทจ๋“ | ๋„๊ตฌ ์ •์ฑ… ๋Œ€์กฐ. ๊ฒฐ๊ณผ๋„ `+0/-0`์œผ๋กœ ๋ถ€์ •ํ™•ํ–ˆ์Œ | ๋„๊ตฌ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ๋ฅผ ์„ธ์…˜ Preflight์— ๋ช…์‹œ |
| 3 | web search ๊ฒฐ๊ณผ๋ฅผ Source Ref๋กœ ์‚ฌ์šฉ | ์ถœ์ฒ˜ ๋“ฑ๊ธ‰ ๋Œ€์กฐ | ๊ฒ€์ƒ‰ ์š”์•ฝ์€ ๊ณต์‹ ์ถœ์ฒ˜ ๋Œ€์ฒด ๋ถˆ๊ฐ€ |
| 4 | **NVD๋ฅผ ๊ณต์‹ ์ถœ์ฒ˜๋กœ ์‚ฌ์šฉ** | ๊ต์ „ ๊ทœ์น™ ๋Œ€์กฐ | **๊ฒฐ๊ณผ: ์‹ฌ๊ฐ๋„๊ฐ€ 9.8 โ†’ 7.5๋กœ ๋ฐ”๋€œ** (์•„๋ž˜ ยง3) |
| 5 | ๊ต์ • ์ง€์‹œ๊ฐ€ ํ™”๋ฉด ๋ฌธ๊ตฌ์—๋งŒ ๋ฐ˜์˜๋˜๊ณ  ์‚ฐ์ถœ๋ฌผ์—๋Š” ๋ฏธ๋ฐ˜์˜ | `git diff`๋กœ ์‹ค์ œ ํŒŒ์ผ ํ™•์ธ | **"๊ณ ์ณค์Šต๋‹ˆ๋‹ค" ์„ ์–ธ์€ Evidence๊ฐ€ ์•„๋‹ˆ๋‹ค** |
| 6 | **๊ณต์‹ ์ถœ์ฒ˜ ์•ˆ์—์„œ ์ž˜๋ชป๋œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ธ์šฉ** โ€” ADP ๊ฐ’์„ CNA ๊ฐ’์œผ๋กœ ๊ท€์† | JSON ๊ตฌ์กฐ๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๋‹จ์œ„๋กœ ์žฌํŒŒ์‹ฑ | Source Ref์— **ํ•„๋“œ ๊ฒฝ๋กœ**๊นŒ์ง€ ๊ธฐ์žฌ |

### 6๋ฒˆ์ด ๊ฐ€์žฅ ๊นŠ์€ ์‹คํŒจ ๋ชจ๋“œ์ž…๋‹ˆ๋‹ค

์„ธ ์˜ค๋ฅ˜์˜ ์ธต์œ„๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

| | ์‹คํŒจ | ์žก๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ฒƒ |
|---|---|---|
| 4๋ฒˆ | ๋น„๊ณต์‹ ์ถœ์ฒ˜๋ฅผ ์”€ | ์ถœ์ฒ˜ ๋ชฉ๋ก๋งŒ ๋ด๋„ ์žกํž˜ |
| 5๋ฒˆ | ์ง€์ ํ–ˆ๋Š”๋ฐ ์‚ฐ์ถœ๋ฌผ์— ๊ทธ๋Œ€๋กœ ๋‚จ์Œ | ํŒŒ์ผ **diff**๋ฅผ ๋ด์•ผ ์žกํž˜ |
| **6๋ฒˆ** | ๊ณต์‹ ์ถœ์ฒ˜๋กœ ๋ฐ”๊ฟจ๋Š”๋ฐ **๊ทธ ์•ˆ์˜ ์ž˜๋ชป๋œ ํ•„๋“œ**๋ฅผ ์ธ์šฉ | **์›๋ฌธ JSON ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ํŒŒ์‹ฑ**ํ•ด์•ผ ์žกํž˜ |

"์ถœ์ฒ˜๊ฐ€ ๊ณต์‹์ธ๊ฐ€"๋งŒ ๊ฒ€์‚ฌํ•˜๋Š” ์ ˆ์ฐจ๋กœ๋Š” 6๋ฒˆ์„ **์›๋ฆฌ์ ์œผ๋กœ** ์žก์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ Source Ref ํ˜•์‹์„ `SRC-002 / CVE JSON` ์—์„œ
`SRC-002-adp / containers.adp[0].metrics[0].cvssV3_1` ์ˆ˜์ค€์œผ๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.

---

## 3. ๊ทœ์น™์„ ์ง€์ผฐ๋”๋‹ˆ ๊ฐ’์ด ์‹ค์ œ๋กœ ๋‹ฌ๋ผ์กŒ๋‹ค

์ด ์ €์žฅ์†Œ์—์„œ ๊ฐ€์žฅ ๊ฒ€์ฆ ๊ฐ€๋Šฅํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

NVD๋ฅผ ๊ฑท์–ด๋‚ด๊ณ  ๊ณต์‹ CVE record๋งŒ ์‚ฌ์šฉํ•˜์ž, **์‹ฌ๊ฐ๋„๊ฐ€ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ์…‹์œผ๋กœ ๊ฐˆ๋ ธ์Šต๋‹ˆ๋‹ค.**

| ์ถœ์ฒ˜ (์ปจํ…Œ์ด๋„ˆ) | ๊ฐ’ | ๋ฒกํ„ฐ |
|---|---|---|
| Apache CNA (`containers.cna`) | `"critical"` (์ •์„ฑ, **๋น„CVSS**) | ์—†์Œ |
| CISA-ADP (`containers.adp`) | **7.5 HIGH** | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N` |
| NVD (**๋ถˆ์ฑ„ํƒ**) | 9.8 CRITICAL | `CVSS:3.1/โ€ฆ/C:H/I:H/A:H` |

**์„ธ ๊ฐ’์˜ ์ฐจ์ด๋Š” ์˜ค๋ฅ˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ „์ œ์˜ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.**

- `7.5` = `I:N/A:N` โ†’ ํŒŒ์ผ **์ฝ๊ธฐ ๋…ธ์ถœ**๋งŒ ์ƒ์ •
- `9.8` = `I:H/A:H` โ†’ `mod_cgi` ํ™œ์„ฑ ์‹œ **RCE**๊นŒ์ง€ ์ƒ์ •

๋”ฐ๋ผ์„œ **์–ด๋А ๊ฐ’์ด ๋งž๋А๋ƒ๊ฐ€ ์•„๋‹ˆ๋ผ, ์–ด๋–ค ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ์ „์ œํ–ˆ๋А๋ƒ**์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
D2 Lab์€ CGI๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฏ€๋กœ **7.5 ์ „์ œ์™€ ์ •ํ•ฉ์ **์ด๊ณ , ์ด๋ฅผ ์‹คํ–‰ **์ „์—** ๋ฌธ์„œ๋กœ ํ™•์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

> ์‹คํ–‰ ์ „์— "์šฐ๋ฆฌ๊ฐ€ ๊ด€์ฐฐํ•  ๊ฒƒ์€ ํŒŒ์ผ ๋…ธ์ถœ์ด์ง€ RCE๊ฐ€ ์•„๋‹ˆ๋‹ค"๋ฅผ ๋ชป๋ฐ•์•„ ๋‘” ๋•๋ถ„์—,
> D2์—์„œ RCE๊ฐ€ ์žฌํ˜„๋˜์ง€ ์•Š์•„๋„ ๊ทธ๊ฒƒ์ด **์‹คํŒจ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ทผ๊ฑฐ**๊ฐ€ ๋ฏธ๋ฆฌ ํ™•๋ณด๋ฉ๋‹ˆ๋‹ค.

์ƒ์„ธ: [`analysis/severity-notes.md`](analysis/severity-notes.md)

---

## 4. ๊ธฐ์ˆ  ๋ถ„์„ ์š”์•ฝ

### Root Cause (INFERENCE โ€” ๊ด€์ฐฐ ์ „์ด๋ฏ€๋กœ FACT ์•„๋‹˜)

> 2.4.49์˜ `ap_normalize_path`๋Š” dot-segment ํŒ์ •์„ ๋ฆฌํ„ฐ๋Ÿด `.`์— ๋Œ€ํ•ด์„œ๋งŒ ์ˆ˜ํ–‰ํ•˜๊ณ 
> `%xx`-unreserved ๋””์ฝ”๋”ฉ๋œ ํ‘œํ˜„์„ ๊ฐ™์€ ํŒ์ • ๋ฒ”์œ„์— ๋„ฃ์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์—,
> ๋‘ ๋ฒˆ์งธ ์ ์ด `%2e`๋กœ ์ธ์ฝ”๋”ฉ๋œ ์„ธ๊ทธ๋จผํŠธ๊ฐ€ `..`๋กœ ์ธ์‹๋˜์ง€ ์•Š์€ ์ฑ„ ์ •๊ทœํ™”๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค.

**FACT (๊ณต์‹ svn tag ์›๋ฌธ ๋Œ€์กฐ)**

- 2.4.49: dot-segment ๊ฒ€์‚ฌ๊ฐ€ `path[l+1] == '.'` ๋ฆฌํ„ฐ๋Ÿด๋งŒ ํ™•์ธ `[SRC-003a]`
- 2.4.50: ๊ฐ™์€ ๊ฒ€์‚ฌ์— `%2e`/`%2E` ๋ถ„๊ธฐ ์ถ”๊ฐ€ `[SRC-003b]`

```c
/* 2.4.50 server/util.c โ€” ์ถ”๊ฐ€๋œ ๋ถ„๊ธฐ */
n = l + 1;
if ((path[n] == '.' || (decode_unreserved && path[n] == '%'
        && path[++n] == '2' && (path[++n] == 'e' || path[n] == 'E')))
    && IS_SLASH_OR_NUL(path[n + 1])) {
    ... l = n + 1; ...
```

### Patch Diff 4์ง€์ 

| ์ง€์  | ์œ„์น˜ | ๋‚ด์šฉ |
|---|---|---|
| ์ž…๋ ฅ | ์š”์ฒญ URI ๊ฒฝ๋กœ (๊ณต๊ฒฉ์ž ํ†ต์ œ) | `.../.%2e/...` โ€” ์ฒซ ์ ์€ ๋ฆฌํ„ฐ๋Ÿด, ๋‘ ๋ฒˆ์งธ๋Š” `%2e` |
| ๋ณ€ํ™˜ | `%xx`-unreserved ๋””์ฝ”๋”ฉ | ๊ฒ€์‚ฌ ์‹œ์ ์—๋Š” ์•„์ง `%2e` ์ƒํƒœ |
| **๊ฒ€์ฆ (๊ฒฐํ•จ)** | dot-segment ์ œ๊ฑฐ `if` | ๋ฆฌํ„ฐ๋Ÿด๋งŒ ๊ฒ€์‚ฌ โ†’ `.%2e`๋ฅผ `..`๋กœ ์ธ์‹ ๋ชป ํ•จ |
| ์˜ํ–ฅ | ์ •๊ทœํ™” ํ›„ Alias ํ•ด์„ | traversal์ด Alias ๋ฐ–์œผ๋กœ ๋งคํ•‘ โ†’ ํŒŒ์ผ ๋…ธ์ถœ, CGI ์‹œ RCE |

### ๋ฐ˜์ฆ ์กฐ๊ฑด โ€” D2์—์„œ ๊ฒ€์ฆํ•  ๊ฒƒ

1. 2.4.49์— `%2e` ํฌํ•จ ๊ฒฝ๋กœ๋ฅผ ๋ณด๋ƒˆ๋Š”๋ฐ Lab marker๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š์œผ๋ฉด ๋ฐ˜์ฆ
2. 2.4.50์— ๊ฐ™์€ ์š”์ฒญ์ด `200` + marker๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋ฐ˜์ฆ
3. **`%2e` ์—†์ด ๋ฆฌํ„ฐ๋Ÿด `../`๋งŒ์œผ๋กœ 2.4.49์—์„œ ๋™์ผ ๊ฒฐ๊ณผ๊ฐ€ ์žฌํ˜„๋˜๋ฉด**
   "์ธ์ฝ”๋”ฉ ๋ฏธ์ธ์‹์ด ํ•ต์‹ฌ ๊ฒฐํ•จ"์ด๋ผ๋Š” ์„ค๋ช…์€ **๋ฐ˜์ฆ๋˜๊ฑฐ๋‚˜ ๋ฒ”์œ„๊ฐ€ ์ถ•์†Œ**๋œ๋‹ค

> 3๋ฒˆ์ด ์ด ๋ถ„์„์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. 1ยท2๋ฒˆ์€ "traversal์ด ๋˜๋Š”๊ฐ€"๋ฅผ ๋ณด์ง€๋งŒ,
> 3๋ฒˆ์€ "**์ธ์ฝ”๋”ฉ ๋•Œ๋ฌธ์—** ๋˜๋Š”๊ฐ€"๋ฅผ ๋ถ„๋ฆฌํ•ด์„œ ๋ด…๋‹ˆ๋‹ค.
> ์ด ์กฐ๊ฑด ๋•Œ๋ฌธ์— Root Cause๋ฅผ D3์—์„œ๋„ FACT๋กœ ์Šน๊ฒฉํ•˜์ง€ ์•Š๊ณ  INFERENCE๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ƒ์„ธ: [`analysis/root-cause.md`](analysis/root-cause.md) ยท [`analysis/cwe.md`](analysis/cwe.md)

### ์—ฐ๊ด€ CVE โ€” ๋ฌด์—‡์„ **์˜๋„์ ์œผ๋กœ ์•ˆ ํ–ˆ๋Š”๊ฐ€**

CVE-2021-42013์€ "2.4.50์˜ 41773 ์ˆ˜์ •์ด ๋ถˆ์ถฉ๋ถ„"ํ•ด์„œ ๋‚˜์˜จ ํ›„์† CVE์ž…๋‹ˆ๋‹ค.
CVE record ์ˆ˜์ค€๊นŒ์ง€๋งŒ ๋Œ€์กฐํ•˜๊ณ  **2.4.50 vs 2.4.51 ์ฝ”๋“œ ๋Œ€์กฐ๋Š” ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.**

๋น ๋œจ๋ฆฐ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์˜๋„์  ์ œ์™ธ์ด๋ฉฐ, ๊ทผ๊ฑฐ 3๊ฐ€์ง€์™€ ํ•จ๊ป˜ ๋ฌธ์„œ์— ๋ช…์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.
**๋ˆ„๋ฝ๊ณผ ์˜๋„์  ์ œ์™ธ๋ฅผ ๊ตฌ๋ถ„ํ•ด ๊ธฐ๋กํ•˜๋Š” ๊ฒƒ** ์ž์ฒด๊ฐ€ ๊ฒ€ํ† ์ž์˜ ์˜คํ•ด๋ฅผ ๋ง‰๋Š” ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

์ƒ์„ธ: [`analysis/related-cve.md`](analysis/related-cve.md)

---

## 5. ํ”„๋กœ์„ธ์Šค ๊ฒฐํ•จ 6๊ฑด (B-1 ~ B-6)

AI์˜ ์˜ค๋ฅ˜์™€ ๋ณ„๊ฐœ๋กœ, **์ ˆ์ฐจ ์ž์ฒด์˜ ๋นˆํ‹ˆ**์„ 6๊ฑด ๋ฐœ๊ฒฌํ•ด ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.
์ƒ์„ธ: [`retrospective/d1-blockers.md`](retrospective/d1-blockers.md)

| ID | ๊ฒฐํ•จ |
|---|---|
| B-1 | ๋„๊ตฌ ๊ธˆ์ง€ ๊ทœ์น™์ด ์‚ฐ๋ฌธ์œผ๋กœ๋งŒ ์กด์žฌ โ€” ์‹คํ–‰ ์‹œ์  ๊ฐ•์ œ ์žฅ์น˜ ์—†์Œ. ํ•œ ์„ธ์…˜์— 3ํšŒ ์œ„๋ฐ˜ |
| B-2 | ์„ธ์…˜ ์‹œ์ž‘ ์งˆ๋ฌธ์— ์•ˆ์ „ ๊ฒฝ๊ณ„(loopback ํ•œ์ •ยทUNKNOWN ์œ ์ง€ยทHuman GO)๊ฐ€ ๋ˆ„๋ฝ |
| B-3 | Gate๊ฐ€ ๋นˆ intake๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์ฐจ๋‹จ (`CVE ID:` / `์ œํ’ˆ:` ๋งŒ ๊ฒ€์‚ฌ) |
| **B-4** | **์ปค๋ฆฌํ˜๋Ÿผ ๋‹จ๊ณ„ ํ•˜๋‚˜๊ฐ€ ํ†ต์งธ๋กœ ๊ฑด๋„ˆ๋›ฐ์–ด์กŒ๊ณ  3์‹œ๊ฐ„ ๋™์•ˆ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์Œ** |
| B-5 | Gate ๋ฌธ์ž์—ด ๋งค์นญ์ด ๋Œ€์†Œ๋ฌธ์žยท์ฝœ๋ก ๊นŒ์ง€ ์ •ํ™• ์ผ์น˜ ์š”๊ตฌ โ€” ๊ต์ • ์ „ REVISE 13๊ฑด |
| B-6 | ์‚ฐ์ถœ๋ฌผ์ด Gate๊ฐ€ ์ฝ์ง€ ์•Š๋Š” ๊ฒฝ๋กœ์— ์ƒ์„ฑ๋จ |

### B-4๊ฐ€ ์ด ์‹ค์Šต์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฐœ๊ฒฌ์ž…๋‹ˆ๋‹ค

ScopeยทSTOP ์กฐ๊ฑดยท์—ญํ•  ๊ณ„์•ฝ์„ ์ž‘์„ฑํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ **์‹คํ–‰๋˜์ง€ ์•Š์€ ์ฑ„๋กœ** ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ๋„˜์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.
์•ˆ์ „ ๊ฒฝ๊ณ„๋ฅผ **๋Œ€ํ™”๋กœ๋Š” ์ฃผ๊ณ ๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์—** ์‚ฌ๋žŒ๋„ AI๋„ "ํ–ˆ๋‹ค"๊ณ  ์ธ์‹ํ–ˆ์ง€๋งŒ,
์‹ค์ œ `scope.md`๋Š” **8๋ฐ”์ดํŠธ ๋นˆ ํŒŒ์ผ**์ด์—ˆ์Šต๋‹ˆ๋‹ค.

Gate ์†Œ์Šค๋ฅผ ์ง์ ‘ ์ฝ์–ด ์š”๊ตฌ ์กฐ๊ฑด์„ ๋Œ€์กฐํ•˜๋Š” ๊ณผ์ •์—์„œ, ์„ธ์…˜ ์‹œ์ž‘ ์•ฝ 3์‹œ๊ฐ„ ๋’ค์— ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

> **๊ฒฐ๋ก : AI ์ฝ”์นญ์€ ์ปค๋ฆฌํ˜๋Ÿผ ๋‹จ๊ณ„์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.**
> AI๋Š” ์ž์‹ ์ด ๋งŒ๋“  Task ๋ชฉ๋ก์„ ๋”ฐ๋ผ๊ฐ€์ง€, ์‚ฌ๋žŒ์ด ์„ค๊ณ„ํ•œ ์ ˆ์ฐจ๋ฅผ ๋”ฐ๋ผ๊ฐ€์ง€ ์•Š๋Š”๋‹ค.
> ๋Œ€ํ™”์—์„œ ํ•ฉ์˜ํ•œ ๋‚ด์šฉ์€ **๋ฐ˜๋“œ์‹œ ํŒŒ์ผ๋กœ ์ฐฉ์ง€**์‹œ์ผœ์•ผ ํ•œ๋‹ค โ€” "๋งํ–ˆ๋‹ค"๋Š” ์‚ฐ์ถœ๋ฌผ์ด ์•„๋‹ˆ๋‹ค.

---

## 6. ๊ฒ€์ฆ ๋ฐฉ๋ฒ•

### Gate ์†Œ์Šค๋ฅผ ๋จผ์ € ์ฝ๊ณ  ํ˜•์‹์„ ๋งž์ท„์Šต๋‹ˆ๋‹ค

Gate๋Š” ๋ฆฌํ„ฐ๋Ÿด ๋ฌธ์ž์—ด์„ **๋Œ€์†Œ๋ฌธ์žยท์ฝœ๋ก ๊นŒ์ง€ ์ •ํ™•ํžˆ** ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

```js
// scripts/lib/checks.mjs (์›๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ)
requireText(rootCause, "root-cause.md", ["FACT:", "INFERENCE:", "UNKNOWN:", "๋ฐ˜์ฆ ์กฐ๊ฑด"], issues);

if (line.trim().startsWith("FACT:") && !/\[SRC-\d+\]/.test(line)) {
  issues.push(label + ": FACT requires [SRC-NNN]");
}
```

Gate๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ **์ „์—** ์ด ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์‚ฐ์ถœ๋ฌผ๊ณผ ๋Œ€์กฐํ•ด **REVISE 13๊ฑด์„ ์‚ฌ์ „ ์˜ˆ์ธก**ํ–ˆ๊ณ ,
๋‚ด์šฉ์€ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„ ํ˜•์‹๋งŒ ๋งž์ถฐ ์ „๋ถ€ ํ•ด์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฐœ๊ฒฌํ•œ ๋ฏธ๋ฐœํ˜„ ์ง€๋ขฐ๋„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค โ€” `/\[SRC-\d+\]/` ๋Š” `[SRC-003a]`์ฒ˜๋Ÿผ
์ˆซ์ž ๋’ค์— ๋ฌธ์ž๊ฐ€ ๋ถ™์€ ์ฐธ์กฐ๋ฅผ ๋งค์นญํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” FACT ์ค„์ด `- FACT:` ๋กœ ์‹œ์ž‘ํ•ด
`startsWith("FACT:")` ๊ฒ€์‚ฌ๋ฅผ ํƒ€์ง€ ์•Š์•„ ํ†ต๊ณผ ์ค‘์ž…๋‹ˆ๋‹ค.

### ๊ฒฐ๊ณผ (์„ ์–ธ์ด ์•„๋‹ˆ๋ผ ์‹ค์ œ ์ข…๋ฃŒ ์ฝ”๋“œ)

```
$ node scripts/check-day.mjs D1
DAY=D1 DECISION=GO
EXIT_CODE=0

$ node scripts/validate-starter.mjs
VALIDATION=GO

$ node --test
# tests 34   # pass 34   # fail 0
```

D2 ์„ ํ–‰ ์‹คํ–‰: **Docker 0ํšŒ / curl 0ํšŒ / Control ์‹คํ–‰ 0ํšŒ.** D1์€ ์ •์  ๋ถ„์„๋งŒ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

---

## 7. ์‚ฐ์ถœ๋ฌผ โ€” ์ฝ๋Š” ์ˆœ์„œ

ํŒŒ์ผ ์ˆœ์„œ๊ฐ€ ๊ณง ๋…ผ๋ฆฌ ์ˆœ์„œ์ž…๋‹ˆ๋‹ค.

| # | ํŒŒ์ผ | ์—ญํ•  |
|---|---|---|
| 1 | [`scope.md`](scope.md) | ๋ฌด์—‡์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‚˜ โ€” ๊ฒฝ๊ณ„ยทSTOP ์กฐ๊ฑดยท์Šน์ธ ๊ณ„์•ฝ |
| 2 | [`intake.md`](intake.md) | ๋Œ€์ƒ ํ•œ ์žฅ ์š”์•ฝ |
| 3 | [`sources/source-map.md`](sources/source-map.md) | ๊ทผ๊ฑฐ๊ฐ€ ์–ด๋””์„œ ์™”๋‚˜ โ€” ์ถœ์ฒ˜ ๋Œ€์žฅ (์ปจํ…Œ์ด๋„ˆยทํ•„๋“œ ๋‹จ์œ„) |
| 4 | [`sources/research-log.md`](sources/research-log.md) | **์–ด๋–ป๊ฒŒ ์‹คํŒจํ–ˆ๋‚˜** โ€” ์‹คํŒจยทREJECTED ๋ณด์กด |
| 5 | [`analysis/root-cause.md`](analysis/root-cause.md) | ์™œ ์ทจ์•ฝํ•œ๊ฐ€ โ€” ์›์ธ + ๋ฐ˜์ฆ ์กฐ๊ฑด |
| 6 | [`analysis/cwe.md`](analysis/cwe.md) | CWE-22 + ๋Œ€์•ˆ ํ›„๋ณด + ๋ฐ˜์ฆ ์กฐ๊ฑด |
| 7 | [`analysis/severity-notes.md`](analysis/severity-notes.md) | ์‹ฌ๊ฐ๋„๊ฐ€ ์™œ ์…‹์œผ๋กœ ๊ฐˆ๋ฆฌ๋Š”๊ฐ€ |
| 8 | [`analysis/related-cve.md`](analysis/related-cve.md) | CVE-2021-42013 ๋Œ€์กฐ + ์˜๋„์  ์ œ์™ธ ๋ฒ”์œ„ |
| 9 | [`harness/harness-v0.md`](harness/harness-v0.md) | ์žฌ์‚ฌ์šฉ ์ ˆ์ฐจ + ๊ฐœ์„  ํ›„๋ณด 7๊ฑด |
| 10 | [`retrospective/d1-blockers.md`](retrospective/d1-blockers.md) | ํ”„๋กœ์„ธ์Šค ๊ฒฐํ•จ B-1~B-6 |

> `harness-v0.md`๊ฐ€ ์ฐธ์กฐํ•˜๋Š” `harness/workflow.md`ยท`AGENTS.md`๋Š” ์›๋ณธ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

---

## 8. ๋‹ค์Œ ๋‹จ๊ณ„

| Day | ๋‚ด์šฉ | ์ƒํƒœ |
|---|---|---|
| **D1** | Source Map ยท Patch Diff ยท Root Cause ยท CWE ยท Harness v0 | โœ… Gate GO |
| D2 | localhost ๊ฒฉ๋ฆฌ Lab (2.4.49 / 2.4.50) โ†’ Control Card โ†’ **Human GO** โ†’ Observation | ์˜ˆ์ • |
| D3 | Same-Control Retest ยท Evidence Review ยท ๋ณด๊ณ ์„œ ยท Harness v1 ยท clean clone ์žฌํ˜„ | ์˜ˆ์ • |

D2์—์„œ๋Š” ์œ„ **๋ฐ˜์ฆ ์กฐ๊ฑด 3๊ฑด**์„ ์‹ค์ œ loopback Lab์—์„œ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค.
Lab์€ deny-by-default๋กœ ๊ตฌ์„ฑํ•˜๊ณ  CGI๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉฐ, ์‹ค์ œ OS ํŒŒ์ผ ๋Œ€์‹  Lab ์†Œ์œ  marker๋งŒ ๋…ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

---

## ์ €์ž‘๊ถŒ

์ด ์ €์žฅ์†Œ์˜ **๋ถ„์„ ๋ฌธ์„œ๋Š” ์ œ๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒƒ**์ž…๋‹ˆ๋‹ค.
์‹ค์Šต์— ์‚ฌ์šฉํ•œ ํ”„๋ ˆ์ž„์›Œํฌ(Gate ์Šคํฌ๋ฆฝํŠธ, ํ…œํ”Œ๋ฆฟ, ๊ต์ „ ๊ทœ์น™ ๋ฌธ์„œ)๋Š”
[์›๋ณธ ์ €์žฅ์†Œ](https://github.com/woo4826/security-wave-cve-harness-starter)์— ์žˆ์œผ๋ฉฐ ์—ฌ๊ธฐ์— ํฌํ•จํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
Apache HTTP Server ์†Œ์Šค ์ธ์šฉ์€ Apache License 2.0์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.