[단독공격] 분석 — CVE-2026-9198
CVE-2026-9198 enables unauthenticated attackers to obtain a super‑user JWT via /api/v1/auto_login and immediately execute arbitrary OS commands through /api/v1/validate/code, requiring immediate disabling of these endpoints or upgrade to Langflow ≥ 1.10.2.
📋 요약
- 심각도 critical · CVSS 9.8 · EPSS 0.17053 · 악용난이도 easy · KEV
🔍 공격 기법
-
공격 표면
POST /api/v1/auto_login– 인증 검증이 전혀 없으며, 요청 바디에 어떠한 값이라도 포함하면 SUPERUSER JWT 를 발급한다.POST /api/v1/validate/code–Authorization: Bearer <super‑user‑token>헤더가 존재하면 본문code파라미터를 그대로exec()로 호출한다.
-
단계별 체인 (CVSS 벡터와 직접 매핑)
- 정찰 – 기본 배포(
http://<host>:7860)에 위 두 엔드포인트가 존재하는지GET /api/v1/auto_login혹은OPTIONS로 응답 코드(200/404)를 확인한다. (AV:N,PR:N). - 초기 접근 – 빈 혹은 임의의 JSON(
{})을POST /api/v1/auto_login에 전송 → 인증 없이 SUPERUSER 토큰 발급 (AC:L,UI:N). - 명령 실행 – 획득한 토큰을
Authorization: Bearer <token>헤더에 실어POST /api/v1/validate/code로{ "code": "<악성 쉘 명령>" }전송 → 백엔드가exec("<악성 쉘 명령>")를 수행, 서비스 계정 권한으로 OS 커맨드 실행. - 지속·영향 – 동일 토큰을 이용해 파일 생성, 크론/시스템d 등록 등 영구화 가능. 슈퍼유저 권한이 이미 부여돼 추가 권한 상승 단계가 필요 없으며, 명령 결과에 따라 시스템 전체 장악이 이루어진다.
- 정찰 – 기본 배포(
-
전제 조건·관측 지표
- 네트워크 접근만 있으면 (
AV:N) 바로 요청 가능. - 인증 요구 없음(
PR:N), 사용자 입력 검증 부재(AC:L). - 로그에 나타나는 특징:
/api/v1/auto_login에 빈 크레덴셜 POST 기록.- JWT 발급 시
role":"superuser"포함된 토큰 로그. code파라미터에 쉘 메타문자(; && |)가 포함된 요청.- 명령 실행 후 비정상적인 outbound DNS/HTTP 트래픽.
- 네트워크 접근만 있으면 (
-
근거 – 다중 소스 교차검증에서 일관성이 확인됐으며([교차검증] 다중 소스 데이터 일관성 확인됨). EPSS 0.17053(≈17 %)와 KEV 등재는 실제 악용 가능성을 높게 평가한다([실측 악용예측]). 따라서 “easy” 난이도·즉시 대응(immediate) 우선순위가 논리적으로 도출된다.
악용 가능성: 이 취약점은 AV:N/AC:L/PR:N/UI:N 벡터가 의미하듯 네트워크를 통해 바로 접근 가능하고 공격 복잡도가 낮으며 사전 권한이나 사용자 동작 없이도 실행됩니다. EPSS 0.17053(≈17 %)이라는 높은 실측 확률과 KEV에 등재된 점은 실제 환경에서 이미 악용되고 있음을 입증합니다. 공격자는 외부에서 /api/v1/auto_login 엔드포인트를 호출해 SUPERUSER 토큰을 무조건 발급받고, 동일 세션으로 /api/v1/validate/code 파라미터에 임의의 쉘 명령을 전달하면 exec()가 실행되어 원격 코드 실행이 이루어집니다. 두 API 모두 인증·인증 검증이 전혀 없으므로 기본 Langflow 배포에서는 공개된 HTTP POST 요청만으로 전체 시스템 권한을 획득할 수 있습니다. 따라서 정찰 단계에서 엔드포인트 존재 여부만 확인하면 초기 접근과 권한 상승이 연속적으로 이루어지며, 별도의 내부 네트워크 침투 없이도 완전 RCE가 가능한 매우 쉬운 공격 경로입니다. 이러한 흐름은 네트워크 차단이나 인증 강화 없이는 방어자가 탐지하기 어려운 고위험 체인으로 평가됩니다.
💥 영향 분석
- 슈퍼유저 JWT를 이용해 임의 OS 명령을 실행함으로써 파일 읽기/수정, 비밀키 탈취, 서비스 중단, 백도어 설치 등 전체 서버 장악이 가능하다.
- 토큰은 애플리케이션 내에서 최고 권한을 부여하므로 추가 권한 상승 절차가 필요 없으며, 기본 배포에서는 방화벽·인증 레이어가 적용되지 않아 위험도가 극대화된다.
🔗 관련 취약점·체이닝
- CWE‑287 (Improper Authentication) –
/api/v1/auto_login이 인증을 전혀 수행하지 않음. - CWE‑78 (OS Command Injection) –
exec()로 전달된 문자열에 대한 검증 부재. - 두 CWE가 결합돼 “인증 우회 → 명령 주입” 패턴이 형성된다. 동일한 플라스크 기반 OSS에서 로그인 엔드포인트와
eval/exec함수가 동시에 존재할 경우 보고된 사례와 유사하다(구체적 CVE 번호는 확인되지 않음, 추정: 일반적인 패턴).
🔎 탐지
/api/v1/auto_login에 대한 빈 혹은 무의미한 크레덴셜 POST 로그.role":"superuser"가 포함된 JWT 발급 후 동일 토큰을 사용한/api/v1/validate/code호출 기록.code파라미터에 쉘 메타문자(; && |)가 포함된 POST 바디.- 명령 실행 직후 발생하는 비정상적인 outbound 트래픽(외부 DNS·HTTP 요청 등).
🛡️ 완화 방안
-
즉시 조치
/api/v1/auto_login와/api/v1/validate/code를 차단하거나 반드시 인증 미들웨어를 적용한다.- 현재 발급된 모든 JWT 를 폐기하고, 서비스 재시작 후 새로운 비밀키와 토큰 정책을 적용한다.
-
근본 해결
- Langflow ≥ 1.10.2 로 업그레이드(공식 패치 포함).
exec()사용을 제거하고, 안전한 서브프로세스 호출(subprocess.runwith whitelist) 혹은 입력 검증을 추가한다.
-
추가 방어
- WAF/IPS 에서
/api/v1/validate/code로 전달되는code파라미터에 OS 명령어 패턴 차단 규칙 적용. - SIEM 에 위 탐지 지표를 연동해 실시간 알림 및 자동 차단 정책 수립.
- WAF/IPS 에서
⚖️ 위험도 / 우선순위
- 조치: immediate (지금 즉시(24h 내))
- 근거: CVSS=9.8 · KEV · EPSS=0.17053 · exploit=easy · in_scope=None