
CVE-2026-33017 - Langflow 인증되지 않은 RCE 익스플로잇
coded by: Xer0TLabs x Persephrak Decentralized Syndicate
이 문서는 검토, 사고 대응 및 방어적 분석을 위해 제공된 Python 프로그램에 대한 높은 수준의 설명입니다. 이 문서는 의도적으로 운영 지침, 대상 선택 가이드, 페이로드 예시 또는 시스템 접근 권한 획득 절차를 포함하지 않습니다.
이 스크립트는 주장된 Langflow 인증 없는 원격 코드 실행 취약점에 대한 익스플로잇으로 자체 표시됩니다. 이 README는 코드가 수행하려는 작업을 설명합니다. CVE 식별자, 영향을 받는 버전, 엔드포인트 동작, 공급업체 권고 또는 스크립트의 효율성을 독립적으로 검증하지 않습니다.
이 프로그램은 Langflow HTTP 엔드포인트에 특수하게 구성된 JSON 데이터를 전송하려고 시도하는 명령줄 자동화 도구로 구조화되어 있습니다. 의도된 전제는 플로우 정의에 포함된 사용자 제어 Python이 원격 애플리케이션에 의해 처리된다는 것입니다.
그 전제가 대상에서 성립한다면, 스크립트는 이를 임의 운영 체제 명령 실행으로 전환하도록 설계되었습니다. 기본 실행 확인 외에도 지속성 확립, 대화형 원격 세션 생성, 정찰 명령 실행 및 로컬에서 SSH 키 쌍 생성을 위한 루틴이 포함되어 있습니다.
이러한 기능은 승인 없이 시스템을 손상시킬 수 있으므로 코드는 잠재적으로 악의적이거나 이중 용도 도구로 취급되어야 합니다. 명시적으로 승인되고 정의된 테스트 범위에 의해 관리되지 않는 한 시스템에 대해 실행해서는 안 됩니다.
이 프로그램은 인수 구문 분석, JSON 처리, HTTP 요청, 소켓, 스레드, 하위 프로세스 실행 및 파일 접근을 위한 표준 Python 모듈을 임포트합니다.
ssl._create_unverified_context를 통해 전역적으로 일반 TLS 인증서 검증을 비활성화합니다. 이로 인해 HTTPS 요청이 유효하지 않거나 신뢰할 수 없는 인증서를 수락하게 됩니다. 테스트 코드에서 가끔 볼 수 있지만, 이는 가로채기 및 사칭에 대한 보호를 약화시키므로 프로덕션에서 안전하지 않습니다.
Colors는 색상 출력을 인쇄하는 데 사용되는 ANSI 터미널 이스케이프 시퀀스를 정의합니다.
Logger는 정보, 성공, 경고 및 오류 메시지를 인쇄하는 작은 유틸리티 클래스입니다. banner() 메서드는 스크립트의 제목, 주장된 취약점, 주장된 영향을 받는 제품 범위, 심각도 및 CISA KEV 상태를 표시합니다. 이러한 주장은 프로그램의 표시 텍스트이며 주장이 정확하다는 증거가 아닙니다.
이것이 주요 클래스입니다. 초기화될 때:
http:// 접두사를 추가합니다.기본 플로우 ID는 고정된 UUID 유사 값입니다. 프로그램은 명령줄 옵션을 통해 이를 재정의할 수 있도록 허용합니다.
_build_malicious_payload(command)는 하나의 노드가 있는 플로우 그래프와 유사한 JSON 객체를 생성합니다. 노드는 CustomComponent로 표시되며 code 필드에 Python 소스 코드를 포함합니다.
삽입된 소스는 운영 체제 명령을 호출하려고 시도합니다. 먼저 하나의 Python API를 시도하고 오류가 발생하면 하위 프로세스 호출로 대체합니다. JSON 구조는 요청 전송 코드로 반환됩니다.
이것이 핵심 익스플로잇 로직입니다. 수신 서비스가 그래프를 처리하는 동안 제출된 코드를 실행할 것이라고 가정합니다.
_send_exploit_request(payload_data)는 페이로드를 JSON으로 직렬화하고 구성된 엔드포인트에 HTTP POST 요청을 만듭니다. 일반적인 브라우저 유사 헤더를 포함하며 응답 본문 텍스트와 HTTP 상태를 모두 반환합니다.
HTTP 오류는 프로그램을 종료하는 대신 포착되어 반환됩니다. 연결 실패 또는 타임아웃과 같은 기타 예외는 문자열로 변환되어 상태 0으로 반환됩니다.
check_vulnerability()는 마커 명령이 포함된 페이로드를 전송한 다음 성공적인 HTTP 응답 또는 error라는 단어가 포함된 응답을 대상이 "취약해 보이는" 증거로 취급합니다.
이것은 신뢰할 수 있는 검증 방법이 아닙니다. 200 응답, 500 응답 또는 애플리케이션 오류는 코드 실행과 무관한 여러 이유로 발생할 수 있습니다. 스크립트는 마커의 출력을 독립적으로 관찰하지 않으므로 오탐(false positive)을 생성할 수 있습니다.
execute_command(command)는 제공된 명령을 악성 플로우 페이로드에 래핑하여 전송합니다. HTTP 200 또는 500을 가능한 성공적인 결과로 해석합니다.
다시 말하지만, 상태 코드만으로는 원격 명령 실행을 입증하지 않습니다. 방어적 코드 검토 관점에서 이 메서드는 운영자가 임의 OS 명령을 제공할 수 있도록 하여 도구를 유연하게 만들려고 시도합니다.
_build_ssh_payload() 및 inject_ssh_key()는 원격 SSH 구성 및 authorized-key 파일을 수정하도록 설계되었습니다. 시도된 작업에는 SSH 디렉터리 생성, SSH 공개 키 추가, 권한 변경, SSH 데몬 설정 수정, SSH 서비스 재시작, cron 기반 지속성 메커니즘 생성 및 셸 기록 아티팩트 제거가 포함됩니다.
이것들은 무해한 취약점 확인이 아닌 지속성 및 방어 회피 동작입니다. 프로그램은 실제로 파일이나 서비스가 변경되었는지 확인하지 않고 HTTP 상태만으로 성공을 주장할 수 있습니다.
_build_reverse_shell_payload()는 대상이 운영자 제어 호스트 및 포트로 아웃바운드 네트워크 연결을 시작하도록 하는 여러 대체 메커니즘을 조립합니다.
spawn_reverse_shell()은 백그라운드 스레드에서 로컬 TCP 리스너를 시작하고, 잠시 대기한 후 원격 페이로드를 전송한 다음 연결을 기다립니다.
_start_listener()는 연결을 수락하고 간단한 대화형 명령 루프를 제공합니다. 이것은 원격 접근 기능입니다. 오류 처리가 제한적이고, 들어오는 연결을 인증하지 않으며, 안전한 관리 또는 합법적인 테스트 인프라에 적합하지 않습니다.
full_exploit_chain()은 여러 동작을 결합합니다:
정찰 목록은 신원, 권한, 운영 체제 정보, 파일, 프로세스, 수신 서비스, 계정 및 예약된 작업을 밝히기 위한 것입니다. 이는 침해 후 열거의 특징입니다.
generate_ssh_key_pair(key_path)는 요청된 파일이 아직 존재하지 않는 경우 로컬 ssh-keygen 프로그램을 호출하여 4096비트 RSA 키 쌍을 생성합니다.
주장된 CVE를 참조하는 키 주석을 생성하며 SSH 지속성 기능을 지원하기 위한 것입니다. 이는 원격 대상이 아닌 스크립트 자체가 실행되는 시스템에 영향을 미칩니다.
main()은 대상 선택, 플로우 ID, 단일 명령 실행, SSH 키 처리, 리버스 셸 설정, 전체 체인 실행, 자동 키 생성 및 자세한 출력을 위한 명령줄 옵션을 정의합니다.
코드는 제한된 검증만 수행합니다. 예를 들어, 리버스 셸 및 전체 체인 모드는 로컬 호스트와 포트가 필요합니다. 권한 부여, 범위, 대상 소유권, URL 안전성 또는 대상이 실제로 Langflow 인스턴스인지 여부를 검증하지 않습니다.
encoded_key 변수는 계산되지만 사용되지 않습니다.이 코드를 검토하는 보안 팀은 다음을 악용 시도 또는 침해 후 활동의 지표로 취급해야 합니다:
수정 결정을 위해서는 이 스크립트에 포함된 버전 및 심각도 문구보다는 공식 Langflow 보안 권고, 릴리스 노트 및 조직의 취약점 관리 프로세스에 의존하십시오.
이 프로그램을 배포 또는 접근 도구로 실행하거나 재배포하지 마십시오. 시스템에서 발견된 경우 증거로 보존하고, 해시와 타임스탬프를 기록하고, 사본에 대한 접근을 제한하고, 관련 서비스 및 네트워크 로그를 검사하고, 조직의 사고 대응 프로세스를 따르십시오.
합법적인 승인된 평가를 위해 서면 범위, 비파괴적 검증 계획, 문서화된 중지 조건 및 수정 중심 보고서를 사용하십시오. 지속성, 리버스 셸, 자격 증명 변경, 기록 삭제 또는 시스템을 방해하거나 승인되지 않은 접근을 남길 수 있는 모든 작업을 피하십시오.