
CVE-2026-9198에 대한 개념 증명 - IBM Langflow 자동 로그인 우회를 통한 인증 없는 RCE
이 저장소는 IBM Langflow OSS에 영향을 미치는 CVE-2026-9198에 대한 교육용 개념 증명을 제공합니다.
이 PoC(poc.py)는 인증되지 않은 공격자가 다음을 연쇄적으로 사용하여 원격 코드 실행을 달성하는 방법을 보여줍니다:
GET/POST /api/v1/auto_login (자동 로그인이 활성화된 경우 슈퍼유저 토큰 반환), 그리고POST /api/v1/validate/code (공격자가 제어하는 Python 코드 실행)이 코드와 제공된 Docker 스택은 로컬 보안 테스트 및 교육 전용입니다.
소유하지 않았거나 명시적으로 테스트 권한을 받지 않은 시스템에 대해 실행하지 마십시오.
.
├── poc.py
├── vulnerable/docker-compose.yaml
└── patched/docker-compose.yaml
poc.py: 익스플로잇 PoC.vulnerable/docker-compose.yaml: 을 사용하는 실습 스택 (취약).langflowai/langflow:1.10.0patched/docker-compose.yaml: langflowai/langflow:1.10.1을 사용하는 실습 스택 (패치된 동작 확인용).두 컴포즈 파일 모두 http://127.0.0.1:9999에서 poc.py를 테스트하기 위한 실습 환경으로 의도적으로 구성되어 있습니다.
pip install requests
취약한 환경을 시작합니다:
docker compose -f vulnerable/docker-compose.yaml up -d
PoC를 실행합니다:
python3 poc.py
취약한 경우 예상되는 결과에는 빨간색 [!] 줄과 다음과 유사한 명령 출력이 포함됩니다:
[!] /api/v1/auto_login is vulnerable: uid=... gid=...
먼저 취약한 스택을 중지합니다(실행 중인 경우):
docker compose -f vulnerable/docker-compose.yaml down -v
패치된 환경을 시작합니다:
docker compose -f patched/docker-compose.yaml up -d
동일한 PoC를 실행합니다:
python3 poc.py
패치된 경우 예상되는 결과는 익스플로잇 체인이 더 이상 성공하지 않음을 나타내는 초록색 [-] 줄입니다.
poc.py에서:
URL 기본값은 http://127.0.0.1:9999CMD 기본값은 id다른 로컬 대상이나 명령을 테스트해야 하는 경우 이 상수를 조정하십시오.