Share
## https://sploitus.com/exploit?id=2E9D7F26-C69D-5E2D-AE31-93049A40C9E1
# CVE-2023-4911 "Looney Tunables" ๋ถ„์„ ํ™˜๊ฒฝ

> GNU C Library(glibc) ๋™์  ๋กœ๋”์˜ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ์ทจ์•ฝ์ (Local Privilege Escalation) ๋ถ„์„ ๋ฐ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ Docker ๊ธฐ๋ฐ˜ ์‹ค์Šต ํ™˜๊ฒฝ์ž…๋‹ˆ๋‹ค.

---

## CVE ์ •๋ณด

| ํ•ญ๋ชฉ | ๋‚ด์šฉ |
|------|------|
| **CVE ๋ฒˆํ˜ธ** | CVE-2023-4911 |
| **๋ณ„์นญ** | Looney Tunables |
| **์ทจ์•ฝ ๋Œ€์ƒ** | GNU C Library (glibc) 2.34 ~ 2.38 |
| **์ทจ์•ฝ ๋ฒ„์ „** | Ubuntu 22.04 โ€” libc6 2.35-0ubuntu3.3 ์ดํ•˜ |
| **ํŒจ์น˜ ๋ฒ„์ „** | libc6 2.35-0ubuntu3.4 (USN-6404-1, 2023-10-04) |
| **ํƒ€์ž…** | Buffer Overflow in ld.so |
| **์˜ํ–ฅ** | Local Privilege Escalation (์ผ๋ฐ˜ ์œ ์ € โ†’ root) |
| **๋ฐœ๊ฒฌ** | Qualys Security Research Team |

---

## ์ทจ์•ฝ์  ๋ฉ”์ปค๋‹ˆ์ฆ˜

glibc ๋™์  ๋กœ๋”(`ld.so`)๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ `GLIBC_TUNABLES` ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.  
`SUID ๋ฐ”์ด๋„ˆ๋ฆฌ` ์‹คํ–‰ ์‹œ `__libc_enable_secure = 1`์ด ์„ค์ •๋˜๊ณ , ld.so๋Š” ํ•ด๋‹น ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ๋ฌดํšจํ™”(nullify)ํ•˜๋Š” ์ฝ”๋“œ ๊ฒฝ๋กœ์— ์ง„์ž…ํ•ฉ๋‹ˆ๋‹ค.  
์ด ๊ณผ์ •์—์„œ `tunable1=tunable2=value` ํ˜•์‹์˜ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์ž˜๋ชป๋œ ๊ธธ์ด ๊ณ„์‚ฐ์œผ๋กœ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

```
์ผ๋ฐ˜ ๋ฐ”์ด๋„ˆ๋ฆฌ:  __libc_enable_secure = 0  โ†’  nullify ์ฝ”๋“œ ๋ฏธ์ง„์ž…  โ†’  ์ทจ์•ฝ์  ์—†์Œ
SUID ๋ฐ”์ด๋„ˆ๋ฆฌ:  __libc_enable_secure = 1  โ†’  nullify ์ฝ”๋“œ ์ง„์ž…   โ†’  ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ
```

**์ต์Šคํ”Œ๋กœ์ž‡ ํ๋ฆ„:**
```
GLIBC_TUNABLES ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ
        โ†“
ld.so BSS ์˜์—ญ link_map ํฌ์ธํ„ฐ ๋ฎ์–ด์“ฐ๊ธฐ
        โ†“
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒ€์ƒ‰ ๊ฒฝ๋กœ๋ฅผ evil_lib/ ๊ฒฝ๋กœ๋กœ ๋ณ€์กฐ
        โ†“
evil.so ๋กœ๋“œ โ†’ constructor ์ž๋™ ์‹คํ–‰
        โ†“
setuid(0) + execve("/bin/bash") โ†’ root shell ํš๋“
```

---

## ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ชฉํ‘œ ๋ฐ ๋ฐฉํ–ฅ์„ฑ

์ด ํ™˜๊ฒฝ์€ ๋‹จ์ˆœํ•œ PoC ์‹คํ–‰์„ ๋„˜์–ด, **์ทจ์•ฝ์ ์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ง์ ‘ ๋ถ„์„ํ•˜๊ณ  ์ต์Šคํ”Œ๋กœ์ž‡์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ณผ์ •**์„ ๋ชฉํ‘œ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

- ์ทจ์•ฝํ•œ glibc ๋ฒ„์ „(2.35-0ubuntu3.3)์ด ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ ์žฌํ˜„
- `ld.so` ์†Œ์Šค์ฝ”๋“œ์™€ ์‹คํ–‰ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํ•จ๊ป˜ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ ์ œ๊ณต
- GDB / gef / gdbserver๋ฅผ ํ†ตํ•œ ๋™์  ๋ถ„์„ ์ง€์›
- ์ผ๋ฐ˜ ์œ ์ €(`researcher`) โ†’ root ๊ถŒํ•œ ์ƒ์Šน ์‹œ๋‚˜๋ฆฌ์˜ค ์ง์ ‘ ์‹ค์Šต
- ํŒ€์› ๋ˆ„๊ตฌ๋‚˜ ๋™์ผํ•œ ํ™˜๊ฒฝ์—์„œ ๋ถ„์„์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก Docker๋กœ ์™„์ „ ๊ฒฉ๋ฆฌ

---

## ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

```
CVE-2023-4911/
โ”œโ”€โ”€ Dockerfile                  # ์ทจ์•ฝ ํ™˜๊ฒฝ ์ด๋ฏธ์ง€ ์ •์˜ (Multi-stage ๋นŒ๋“œ)
โ”œโ”€โ”€ run.sh                      # Docker ๋นŒ๋“œ/์‹คํ–‰ ๊ด€๋ฆฌ ์Šคํฌ๋ฆฝํŠธ
โ”œโ”€โ”€ check_environment.sh        # ์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ ํ™˜๊ฒฝ ์ž๋™ ๊ฒ€์ฆ
โ”œโ”€โ”€ poc/
โ”‚   โ”œโ”€โ”€ exploit.py              # ๊ธฐ๋ณธ PoC โ€” crash(SIGSEGV) ํ™•์ธ์šฉ
โ”‚   โ”œโ”€โ”€ exploit_lpe.py          # LPE ์ต์Šคํ”Œ๋กœ์ž‡ โ€” GDB ๋ถ„์„ ํ›„ ์™„์„ฑ
โ”‚   โ””โ”€โ”€ evil_lib/
โ”‚       โ”œโ”€โ”€ evil.c              # root shell ์‹คํ–‰ํ•˜๋Š” ์•…์„ฑ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
โ”‚       โ””โ”€โ”€ Makefile
โ””โ”€โ”€ test_targets/
    โ”œโ”€โ”€ test_suid.c             # SUID ํ…Œ์ŠคํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ์†Œ์Šค
    โ””โ”€โ”€ test_heap.c             # ํž™ ํ• ๋‹น ํ…Œ์ŠคํŠธ ๋ฐ”์ด๋„ˆ๋ฆฌ ์†Œ์Šค
```

---

## ํ™˜๊ฒฝ ์š”๊ตฌ์‚ฌํ•ญ

- Docker
- Linux ๋˜๋Š” WSL2 (Windows)

---

## ์‚ฌ์šฉ๋ฒ•

### 1. ์ด๋ฏธ์ง€ ๋นŒ๋“œ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰

```bash
./run.sh build && ./run.sh run
```

### 2. sudo ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ

์ปจํ…Œ์ด๋„ˆ ์‹œ์ž‘ ์‹œ sudo ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์š”๊ตฌํ•ฉ๋‹ˆ๋‹ค.

```
๋น„๋ฐ€๋ฒˆํ˜ธ: password
```

### 3. ์ทจ์•ฝ์  ํ™•์ธ

```bash
# SIGSEGV ๋ฐœ์ƒ ์—ฌ๋ถ€ ํ™•์ธ
python3 /workspace/poc/exploit.py --check-only

# ์ง์ ‘ ํŠธ๋ฆฌ๊ฑฐ
GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA \
  /workspace/test_targets/test_suid
```

### 4. GDB ๋ถ„์„

```bash
# ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€ ์ง์ ‘ ๋ถ„์„
gdb -q /workspace/test_targets/test_suid

# ์›๊ฒฉ ๋””๋ฒ„๊น… (gdbserver)
# ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€
gdbserver :1234 /workspace/test_targets/test_suid

# ๋กœ์ปฌ ํ˜ธ์ŠคํŠธ
gdb
(gdb) target remote localhost:1234
```

### 5. LPE ์ต์Šคํ”Œ๋กœ์ž‡ ์‹คํ–‰

GDB๋กœ `OVERFLOW_OFFSET`๊ณผ `TARGET_ADDR` ๋ถ„์„ ํ›„ `exploit_lpe.py` ์ƒ๋‹จ ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

```bash
python3 /workspace/poc/exploit_lpe.py
```

### run.sh ์˜ต์…˜

| ๋ช…๋ น | ์„ค๋ช… |
|------|------|
| `./run.sh build` | Docker ์ด๋ฏธ์ง€ ๋นŒ๋“œ |
| `./run.sh run` | ๋Œ€ํ™”ํ˜• ๋ชจ๋“œ๋กœ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ |
| `./run.sh analysis` | ๋ถ„์„ ๋ชจ๋“œ ์‹คํ–‰ |
| `./run.sh test` | ๋น ๋ฅธ ์ทจ์•ฝ์  ํ™•์ธ |
| `./run.sh clean` | ์ด๋ฏธ์ง€ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์ •๋ฆฌ |

---

## ๋ถ„์„ ํ™˜๊ฒฝ ์ •๋ณด

| ํ•ญ๋ชฉ | ๋‚ด์šฉ |
|------|------|
| Base ์ด๋ฏธ์ง€ | `ubuntu:jammy-20230916` (ํŒจ์น˜ ์ด์ „) |
| glibc ๋ฒ„์ „ | 2.35-0ubuntu3.3 (์ทจ์•ฝ) |
| ld.so ๋ฒ„์ „ | 2.35-0ubuntu3.3 (์ทจ์•ฝ) |
| ๋ถ„์„ ๊ณ„์ • | `researcher` / `password` |
| glibc ์†Œ์Šค | `/workspace/glibc-source` (2.35) |
| ์ฃผ์š” ํฌํŠธ | 1234 (gdbserver) |
| ์ปจํ…Œ์ด๋„ˆ ์˜ต์…˜ | `--privileged`, `--pid=host` |

---

## ๋ถ„์„ ํฌ์ธํŠธ

### ์ •์  ๋ถ„์„
```bash
# ์ทจ์•ฝ ํ•จ์ˆ˜ ์œ„์น˜
/workspace/glibc-source/elf/dl-tunables.c

# ์ฃผ์š” ํ•จ์ˆ˜
__tunables_init()   # ์ง„์ž…์ 
parse_tunables()    # ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐœ์ƒ ์ง€์ 
tunables_strdup()   # ๋ฒ„ํผ ํ• ๋‹น
```

### ๋™์  ๋ถ„์„
```bash
# strace๋กœ ์‹œ์Šคํ…œ ์ฝœ ์ถ”์ 
strace -e trace=mmap GLIBC_TUNABLES="..." /workspace/test_targets/test_suid

# GDB๋กœ __tunables_init ๋ถ„์„
gdb /workspace/test_targets/test_suid
(gdb) break __tunables_init
(gdb) set environment GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=AAAA
(gdb) run
```

---

## ์ฃผ์˜์‚ฌํ•ญ

> **์ด ํ™˜๊ฒฝ์€ ๊ต์œก ๋ฐ ๋ณด์•ˆ ์—ฐ๊ตฌ ๋ชฉ์ ์œผ๋กœ๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.**

- ๋ณธ ํ™˜๊ฒฝ์€ ์ทจ์•ฝ์  ํ•™์Šต๊ณผ ์ต์Šคํ”Œ๋กœ์ž‡ ๊ฐœ๋ฐœ ์—ฐ๊ตฌ๋ฅผ ์œ„ํ•ด ์ œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค
- ์‹ค์ œ ์šด์˜ ์‹œ์Šคํ…œ ๋˜๋Š” ํ—ˆ๊ฐ€๋˜์ง€ ์•Š์€ ๋Œ€์ƒ์— ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค
- ์ปจํ…Œ์ด๋„ˆ๋Š” `--privileged` ๋ชจ๋“œ๋กœ ์‹คํ–‰๋˜๋ฏ€๋กœ ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ๋งŒ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค
- ๋ณธ ์ €์žฅ์†Œ์˜ ์ฝ”๋“œ๋ฅผ ์•…์šฉํ•˜์—ฌ ๋ฐœ์ƒํ•˜๋Š” ๋ชจ๋“  ๋ฒ•์  ์ฑ…์ž„์€ ์‚ฌ์šฉ์ž ๋ณธ์ธ์—๊ฒŒ ์žˆ์Šต๋‹ˆ๋‹ค

---

## ์ฐธ๊ณ  ์ž๋ฃŒ

- [Qualys Security Advisory](https://www.qualys.com/2023/10/03/cve-2023-4911/)
- [glibc ๊ณต์‹ ์ €์žฅ์†Œ](https://sourceware.org/git/?p=glibc.git)
- [Ubuntu Security Notice USN-6404-1](https://ubuntu.com/security/notices/USN-6404-1)