[공격] 분석 — CVE-2026-41137
Remote Code Execution (RCE) via unsanitized user input in CSVAgent's custom Python code execution, requiring immediate patching or disabling of the affected component.
📋 요약
- 심각도 critical · CVSS 8.8 · EPSS 0.0145 · 악용난이도 hard
🔍 공격 기법
(1) 트리거 조건: CSVAgent 노드의 customReadCSVFunc 파라미터에 검증되지 않은 Python 코드를 주입하면, 서버 내 pyodide.runPythonAsync() 함수가 이를 그대로 실행하여 RCE가 발생함.
(2) 공격 단계:
- 정찰: 대상 시스템이 FlowiseAI 기반이며
/api/v1/chatflows엔드포인트가 활성화되어 있는지 확인. - 초기 접근: 유효한 인증 세션을 획득 (PR:L 조건).
- 실행 및 권한 획득:
POST /api/v1/chatflows:customReadCSVFunc에 악성 페이로드(예:;import os;os.system(...))가 포함된 chatflow 생성.POST /api/v1/prediction/[CHATFLOWID]: 생성한 flow를 실행시켜 서버 사이드에서 Python 코드 트리거.
- 영향: 서버 권한으로 임의 명령어 실행 및 시스템 제어권 획득.
(3) 공격 표면:
- 엔드포인트:
/api/v1/chatflows,/api/v1/prediction/[CHATFLOWID] - 파라미터:
customReadCSVFunc(User-controlled input) - 실행 환경: Pyodide (Python runtime in JS)
(4) CVSS 벡터 분석:
- AV:N / AC:L: 네트워크를 통해 특별한 조건 없이 공격 가능.
- PR:L: 인증된 사용자 권한이 필요함.
- UI:N: 피해자의 상호작용 불필요.
악용 가능성: 본 취약점은 CSVAgent 노드의 customReadCSVFunc 파라미터를 통해 Python 코드를 직접 주입하는 Remote Code Execution(RCE) 결함입니다. 공격 표면은 FlowiseAI 서버의 Pyodide 런타임으로 연결되는 API 엔드포인트이며, 입력값에 대한 Sanitization 부재로 인해 runPythonAsync 함수에서 임의 명령어가 실행됩니다. CVSS 벡터상 AV:N/AC:L로 네트워크를 통해 쉽게 접근 가능하나, PR:L 조건에 따라 인증된 사용자 권한이 반드시 선행되어야 하므로 공격 난이도는 Hard로 판정됩니다. EPSS 수치가 0.0145로 낮고 KEV에 등재되지 않은 점은 현재 야생(In-the-wild)에서의 대규모 자동화 공격 사례는 드물다는 것을 의미하지만, 내부 권한을 가진 공격자가 서버 제어권을 완전히 획득할 수 있다는 점에서 잠재적 위협은 매우 높습니다. 결과적으로 이 취약점은 단순한 이론적 심각도를 넘어, 인증된 계정 탈취나 내부자 위협과 결합될 때 즉시 실전에서 터질 수 있는 치명적인 실행 경로를 제공합니다.
💥 영향 분석
(1) 기술적 위험:
- 서버 내 임의 명령 실행을 통한 시스템 전체 장악.
- Pyodide 환경을 넘어 호스트 OS 수준의 명령어 실행 가능성 존재.
- 내부 데이터베이스 접근 및 민감 정보 유출.
(2) 비즈니스 영향:
- 서비스 가용성 상실 (시스템 파괴 또는 랜섬웨어 감염).
- 고객 데이터 및 API 키 등 기밀 정보 유출로 인한 컴플라이언스 위반.
- 인프라 신뢰도 하락.
🔗 관련 취약점·체이닝
- 추정: 인증 우회(Authentication Bypass) 또는 권한 상승(Privilege Escalation) 취약점이 선행될 경우, 낮은 권한의 사용자뿐 아니라 비인증 공격자까지 공격 범위가 확대되는 체이닝 가능성이 높음.
- 패턴:
User Input$\rightarrow$Unsanitized Interpolation$\rightarrow$Dynamic Code Execution (Pyodide)순의 전형적인 Code Injection 패턴임.
🔎 탐지
(1) 로그 지표: HTTP Request Body 내 customReadCSVFunc 필드에 Python 예약어 및 시스템 명령어 패턴이 포함되었는지 확인.
(2) 탐지 규칙 예시:
- Rule 1 (페이로드 탐지):
POST /api/v1/chatflows요청 중 body에import\s+os,os\.system,subprocess,eval\(,exec\(등의 패턴이 포함된 경우. - Rule 2 (비정상 흐름): 짧은 시간 내에
/api/v1/chatflows생성 후 즉시/api/v1/prediction/[ID]호출 및 이후 바로 해당 flow를DELETE하는 행위.
(3) 오탐 시나리오: 정상적인 데이터 분석을 위해 복잡한 Pandas 코드를 사용하는 사용자.
- 튜닝: 단순
import pandas는 허용하되,os,sys,subprocess등 시스템 제어 모듈 호출 패턴을 정밀하게 필터링함.
🛡️ 완화 방안
- 즉시(긴급 차단): WAF에서
customReadCSVFunc파라미터 내 Python 시스템 함수(os.system등) 호출 패턴을 차단하는 시그니처 적용. (난이도: 하 / 영향: 낮음 / 검증: 공격 페이로드 전송 테스트) - 단기(완화):
CSVAgent기능을 사용하지 않는 경우 해당 노드 설정을 비활성화하거나, API 게이트웨이에서/api/v1/chatflows에 대한 접근 권한을 최소화함. (난이도: 중 / 영향: 기능 제한 발생 / 검증: 엔드포인트 접근 제어 확인) - 근본(해결):
CSVAgent.ts내customReadCSVFunc입력값에 대한 엄격한 Sanitization 로직을 도입하거나, Pyodide 실행 환경을 완전히 격리된 샌드박스로 이전하는 패치 적용 및 업데이트. (난이도: 상 / 영향: 성능 저하 가능성 / 검증: 취약점 재현 테스트)
[분석 근거]
- 교차검증: Severity(Critical)와 CVSS(8.8/High) 간의 불일치가 감지되었으나, RCE라는 치명적 특성을 고려하여 보수적으로 높은 값인 'Critical'을 채택함.
- EPSS: 실측값 0.0145(백분위 0.70627)로 이론적 심각도에 비해 실제 악용 확률은 낮게 예측되나, 이는 KEV 미등재 상태의 통계적 수치임.
- 우선순위: CVSS 8.8의 높은 위험도와 RCE 유형임을 근거로 'scheduled (이번 주 내)' 대응으로 결정함.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=8.8 · non-KEV · EPSS=0.0145 · exploit=hard · in_scope=None