Langflow란?
Langflow는 LangChain(랭체인)을 기반으로 LLM 애플리케이션을 시각적으로 설계 및 구축할 수 있는 오픈소스 로우코드(Low-code) 프레임워크로, 마우스 드래그 앤 드롭 방식으로 컴포넌트를 연결하여 복잡한 AI 에이전트 및 RAG 워크플로우를 빠르게 개발할 수 있는 GUI를 제공함.
[취약점 개요]
- 대상 제품: Langflow (LLM 기반 AI 애플리케이션 빌더)
- CVE-ID: CVE-2026-5027 (CVSS score 8.8 / HIGH)
- 영향 버전: Langflow <= 1.8.4
- 취약점 유형: 경로 탐색을 통한 임의 파일 쓰기 후 원격 코드 실행
- 영향 버전: Langflow <= 1.8.4
- 취약점 유형: 경로 탐색을 통한 임의 파일 쓰기 후 원격 코드 실행
영향도:
- auto-login 활성화 시 인증 우회 가능
- 임의 시스템 파일 덮어쓰기 가능(예: /etc/crontab, /root/.ssh/authorized_keys 등)
- root 권한으로 원격 코드 실행 가능
공격 벡터:
- HTTP POST /api/v2/files 엔드포인트
- multipart 파일 업로드
- filename 파라미터 조작(Path Traversal)
[취약점 설명]
- Langflow의 /api/v2/files 파일 업로드 엔드포인트는 업로드 파일의 filename 검증을 수행하지 않음
- 공격자는 ../ 경로 탐색(Path Traversal)을 활용하여 서버의 임의 위치에 파일 쓰기 가능
- 기본 설정에서 auto-login 기능이 활성화되어 있으면 인증 없이 공격 가능
- 공격자는 ../ 경로 탐색(Path Traversal)을 활용하여 서버의 임의 위치에 파일 쓰기 가능
- 기본 설정에서 auto-login 기능이 활성화되어 있으면 인증 없이 공격 가능
PoC 공격 방식 요약:
1. /api/v2/files에 POST 요청 전송
2. multipart filename 필드에 ../../../../etc/crontab 등 경로 삽입
3. cron, SSH authorized_keys 파일 덮어쓰거나, webshell 업로드하여 원격 코드 실행
2. multipart filename 필드에 ../../../../etc/crontab 등 경로 삽입
3. cron, SSH authorized_keys 파일 덮어쓰거나, webshell 업로드하여 원격 코드 실행
[PoC 상세 분석]
0. PoC 전체 코드
1. PoC 코드 함수별 역할
|
함수
|
역할
|
설명
|
|
get_token()
|
auto-login을 통해 access token 획득
|
- GET /api/v1/auto_login 요청
- 200 OK 확인 후 token 반환 - 실패 시 None |
|
login_with_creds()
|
(username, password)
사용자 계정으로 인증(로그인) 후 token 획득 |
- /api/v1/login 경로에 POST 요청(로그인), JSON 형태로 사용자 정보 전달
- 200 OK 시 token 반환 - 실패 시 None |
|
write_file()
|
Path Traversal로 임의 파일 작성
|
- "../" 반복을 통해 상위 디렉토리 이동
- multipart/form-data로 파일 업로드 - 200/201 OK 시 성공 |
|
exploit()
|
전체 공격 수행
|
- Step1: token 획득
- Step2: 파일 업로드 - cron 기반 reverse shell(/etc/crontab) 또는 Proof 파일(/tmp/...) - 공격 결과 요약 출력 |
|
main()
|
CLI 입력 처리 및 exploit() 호출
|
- argparse로 URL, 계정, 리버스 쉘 관련 옵션을 정의
- exploit() 호출로 공격 시작 |
2. PoC 코드 함수별 동작 설명
2.1 get_token(target)
- 설명: auto-login이 활성화된 환경에서 인증 없이 access token 가져오는 함수.

- 세부 동작:
1. GET /api/v1/auto_login 요청
2. HTTP 200 응답 확인
3. JSON에서 access_token 추출
4. 성공 시 token 반환, 실패 시 None 반환
2. HTTP 200 응답 확인
3. JSON에서 access_token 추출
4. 성공 시 token 반환, 실패 시 None 반환
2.2 login_with_creds(target, username, password)
- 설명: 사용자 계정으로 인증(로그인) 후 token 획득하는 함수

- 세부 동작:
1. /api/v1/login 경로에 POST 요청(로그인), JSON 형태로 사용자 정보 전달
2. 200 OK 확인 후 JSON에서 token 추출
3. 성공 시 token 반환, 실패 시 None 반환
2. 200 OK 확인 후 JSON에서 token 추출
3. 성공 시 token 반환, 실패 시 None 반환
2.3 write_file(target, token, remote_path, content)
- 설명: Path Traversal을 이용하여 서버에 임의 파일 작성하는 함수

- 세부 동작:
1. 상위 디렉토리 이동 문자열 "../" 반복
2. remote_path와 결합 → 서버 내 절대 경로 조작
3. multipart/form-data 형식으로 파일 업로드
4. HTTP 상태 코드 200/201 확인 후 성공 여부 반환
2.4 exploit(...)
- 설명: PoC 전체 공격 수행하는 함수
- 설명: PoC 전체 공격 수행하는 함수


- 세부 동작:
1. Token 획득: 사용자의 자격 증명으로 로그인 또는 get_token() 함수 사용하여 Token 획득
2. 파일 업로드
2-1. 리버스 쉘 배포:
2-1. 리버스 쉘 배포:
- 크론탭 명령어 생성하여 1분마다 루트 권한으로 리버스 쉘 실행하도록 설정(지정된 lhost와 lport로 리버스 쉘 연결)
- write_file() 함수 사용하여 크론탭 명령어를 /etc/crontab 파일에 작성(Path Traversal 공격을 통한 중요 시스템 파일 수정)
- 파일 성공적으로 작성 시 성공 메시지 출력(리버스 쉘 60초 이내에 연결된다는 메시지 출력)
- 크론탭 파일 작성 실패 시 HTTP 상태 코드 및 응답값 출력 후 프로그램 종료
2-2. 증거(Proof) 파일 작성
- 리버스 쉘 배포 필요 없는 경우, Proof 파일(/tmp/CVE-2026-5027-proof.txt) 작성
- 증거 파일 성공적으로 작성 시, 해당 경로 출력 및 파일 작성 성공 메시지 출력
- 증거 파일 작성 실패 시, HTTP 상태 코드 및 오류 메시지 출력 후 프로그램 종료
3. 결과 출력: 공격 완료 메시지 및 공격 정보 출력
2.5 main()
- 설명: Command Line 입력 파싱하여 exploit() 함수에 전달

- 세부 동작:
0. argparse: CLI 통해 스크립트 실행 시 인자 전달받아 처리
1. argparse로 URL, 계정, 리버스 쉘 관련 옵션을 정의
2. CLI 입력된 값들 파싱하여 인수 처리
3. 파싱된 인수를 기반으로 exploit() 함수 호출, 공격 시작
3. PoC 성공 조건
|
조건
|
필요 여부
|
설명
|
|
auto-login 활성화
|
필수 아님, 있으면 공격 용이
|
토큰 획득 시 인증 불필요
|
|
사용자 계정
|
필수 아님
|
auto-login 비활성화 시 계정 필요
|
|
/api/v2/files 접근 가능
|
필수
|
엔드포인트 차단/제한 시 공격 실패
|
|
서버 파일 쓰기 권한
|
필수
|
cron, SSH 등 중요 파일 덮어쓰기 시 필요
|
|
서비스 권한
|
선택적
|
root 권한 시 원격 코드 실행 범위 확대
|
4. 공격 단계 요약
1) 정보 수집: Langflow URL 확인, auto-login 여부 확인
2) 인증 단계: token 획득 (auto-login or 계정 로그인)
3) 파일 업로드: Path Traversal 이용, cron reverse shell 또는 proof 파일 작성
4) 코드 실행: cron job 또는 SSH key를 통해 리버스 쉘 연결
5) 결과 확인: PoC 출력 메시지로 성공 여부 확인
2) 인증 단계: token 획득 (auto-login or 계정 로그인)
3) 파일 업로드: Path Traversal 이용, cron reverse shell 또는 proof 파일 작성
4) 코드 실행: cron job 또는 SSH key를 통해 리버스 쉘 연결
5) 결과 확인: PoC 출력 메시지로 성공 여부 확인
[탐지 패턴 권고]
탐지 패턴1
|
alert tcp $EXTERNAL_NET any -> $HOME_NET [$HTTP_PORTS,7860] (
msg:" Langflow RCE attempt via Path Traversal (CVE-2026-5027)";
flow:to_server,established;
uricontent:"/api/v2/files"; nocase;
content:"filename="; nocase;
content:"../"; within:20;
classtype:web-application-attack;
sid:20260405;
rev:1;
)
|
탐지 패턴2
|
alert tcp $EXTERNAL_NET any -> $HOME_NET [$HTTP_PORTS,7860] (
msg:" Langflow RCE attempt via Path Traversal (CVE-2026-5027)";";
flow:to_server,established;
uricontent:"/api/v2/files"; nocase;
content:"filename="; nocase;
pcre:"/\s*(\"|')?(\.\.\/|%2e%2e\/)/i";
classtype:web-application-attack;
sid:20260405;
rev:1;
)
|
[대응 방안]
- auto-login 비활성화
- 파일 업로드 시 filename 검증 및 경로 제한
- cron, SSH 등 시스템 파일에 대한 쓰기 권한 제한
- 보안장비에서 /api/v2/files POST 요청 내 ../ 경로 포함 시 차단
[요약]
- Langflow에서 파일 업로드 경로 검증 미흡 → Path Traversal → 원격 코드 실행 가능
- 인증 우회(auto-login 기본 설정) 시 쉽게 공격 가능
- 탐지 및 대응: /api/v2/files 엔드포인트 제한, filename 검증, IPS/WAF 패턴 적용, auto-login 비활성화
'보안 > PoC 분석' 카테고리의 다른 글
| XWiki Admin Tools Application에서 발생하는 CSRF를 통한 RCE 취약점(CVE-2023-48292) (0) | 2025.08.21 |
|---|---|
| OpenPanel에서 발생하는 OS Command Injection(CVE-2024-53584) (0) | 2025.06.22 |