Share
## https://sploitus.com/exploit?id=9446A906-2D69-5E2B-B8C9-FF00CEE686F1
# Research: XWiki Platform RCE (CVE-2024-55879) Simulation

![Security Research](https://img.shields.io/badge/Research-Security-red) ![XWiki](https://img.shields.io/badge/XWiki-Platform-blue) ![CVE](https://img.shields.io/badge/CVE--2024--55879-Critical-orange)

## ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ (Project Overview)

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” **XWiki Platform**์—์„œ ๋ฐœ๊ฒฌ๋œ ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰(RCE) ์ทจ์•ฝ์ ์ธ **CVE-2024-55879**๋ฅผ ์—ฐ๊ตฌํ•˜๊ณ  ์‹œ์—ฐํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ์ถ•๋œ **์—ฐ๊ตฌ์šฉ PoC(Proof of Concept) ํ™˜๊ฒฝ**์ž…๋‹ˆ๋‹ค.

์‹ค์ œ XWiki ์—”์ง„์€ ๋งค์šฐ ๋ฌด๊ฒ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณธ ์—ฐ๊ตฌ์—์„œ๋Š” ์ทจ์•ฝ์ ์˜ ํ•ต์‹ฌ ์›๋ฆฌ์ธ **์ž„์˜ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰(Unsafe Script Execution)** ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ **Spring Boot**์™€ **Groovy**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฝ๋Ÿ‰ํ™”๋œ ํ˜•ํƒœ๋กœ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํŒŒ์ผ ์ฒ˜๋ฆฌ ๋ฐ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ๊ณผ์ •์—์„œ์˜ ๋ณด์•ˆ ๊ฒฐํ•จ์„ ํ˜„์‹ค์ ์œผ๋กœ ์žฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

### ์—ฐ๊ตฌ ๋ชฉํ‘œ
1. **Unsafe Reflection/Scripting** ์ทจ์•ฝ์ ์˜ ๋™์ž‘ ์›๋ฆฌ ์ดํ•ด
2. Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ์˜ ๋™์  ์ฝ”๋“œ ์‹คํ–‰(GroovyShell ๋“ฑ) ์œ„ํ—˜์„ฑ ๋ถ„์„
3. **RCE(Remote Code Execution)** ๊ณต๊ฒฉ ๋ฒกํ„ฐ๋ฅผ ํ†ตํ•œ ์‹œ์Šคํ…œ ์žฅ์•… ์‹œ๋‚˜๋ฆฌ์˜ค ๊ฒ€์ฆ

---

## ๊ธฐ์ˆ  ์Šคํƒ (Tech Stack)

| ๊ตฌ๋ถ„ | ์Šคํƒ | ๋ฒ„์ „ | ๋น„๊ณ  |
| :--- | :--- | :--- | :--- |
| **Framework** | Spring Boot | `2.7.5` | Simulation Framework |
| **Engine** | Groovy | `3.0.13` | **Script Execution Engine** |
| **Vulnerability** | Insecure Deserialization | - | RCE Vector |
| **Language** | Java | `11` | JDK Environment |

---

## ์ทจ์•ฝ์  ๋ถ„์„ ๋ณด๊ณ ์„œ (Vulnerability Report)

๋ณธ ํ”„๋กœ์ ํŠธ์—์„œ ๋ถ„์„ํ•œ ํ•ต์‹ฌ ์ทจ์•ฝ์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

### 1. Remote Code Execution via Script Injection
*   **CVE-2024-55879**
*   **์„ค๋ช…**: XWiki์˜ ํŠน์ • ํด๋ž˜์Šค(`XWiki.ConfigurableClass` ๋“ฑ)๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์—์„œ, ์ ์ ˆํ•œ ๊ถŒํ•œ ๊ฒ€์ฆ ์—†์ด ์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’์ด ์Šคํฌ๋ฆฝํŠธ ์—”์ง„์œผ๋กœ ์ „๋‹ฌ๋˜์–ด ์‹คํ–‰๋˜๋Š” ์ทจ์•ฝ์ ์ž…๋‹ˆ๋‹ค. ๊ณต๊ฒฉ์ž๋Š” ์ด๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ๊ถŒํ•œ์œผ๋กœ ์ž„์˜์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
*   **์œ„ํ—˜๋„**: **Critical (System Compromise)**
*   **๊ตฌํ˜„ ์œ„์น˜**: [์ทจ์•ฝํ•œ ์ปจํŠธ๋กค๋Ÿฌ](src/main/java/com/xwiki/simulation/VulnerableController.java) (`VulnerableController.java`)

### 2. Groovy Script Execution
*   **Methodology**
*   **์„ค๋ช…**: Java ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‚ด์—์„œ `GroovyShell` ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ์ด ์—†์œผ๋ฉด, Java API ์ „์ฒด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๊ฐ•๋ ฅํ•œ ์‰˜์„ ๊ณต๊ฒฉ์ž์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ๊ผด์ด ๋ฉ๋‹ˆ๋‹ค.
*   **Payload ์˜ˆ์‹œ**: `"Runtime.getRuntime().exec('id')"`

---

## ์‹คํ–‰ ๋ฐ ๊ฒ€์ฆ (How to Reproduce)

์—ฐ๊ตฌ ๋ฐ ๊ฒ€์ฆ์„ ์œ„ํ•ด ๊ฒฉ๋ฆฌ๋œ ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

```bash
# 1. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker-compose up --build
```

1.  **Exploit Simulation**:
    ```bash
    curl -X POST http://localhost:8082/xwiki/bin/save \
         -H "Content-Type: application/json" \
         -d '{"content": "Runtime.getRuntime().exec(\"id\").getInputStream().getText()"}'
    ```
    *   **๊ฒฐ๊ณผ**: ๋ฆฌ๋ˆ…์Šค `id` ๋ช…๋ น์–ด์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๊ฐ€ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜๋จ (RCE ์„ฑ๊ณต).

---

## ๋Œ€์‘ ๋ฐฉ์•ˆ (Mitigation)

*   **XWiki ์—…๋ฐ์ดํŠธ**: ๋ณด์•ˆ ํŒจ์น˜๊ฐ€ ์ ์šฉ๋œ ๋ฒ„์ „(15.10.9+, 16.3.0+)์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
*   **์Šคํฌ๋ฆฝํŠธ ์ƒŒ๋“œ๋ฐ•์Šค**: ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์‹œ ๊ถŒํ•œ์„ ์ œํ•œํ•˜๋Š” **Sandbox** ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
*   **์ž…๋ ฅ๊ฐ’ ๊ฒ€์ฆ**: ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ์Šคํฌ๋ฆฝํŠธ๋‚˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ์—„๊ฒฉํžˆ ํ†ต์ œํ•ฉ๋‹ˆ๋‹ค.

---