[공격] 분석 — CVE-2026-29059
Unauthenticated Path Traversal in Windmill's
get_log_fileendpoint allows arbitrary file read; immediate upgrade to version 1.603.3 is required.
📋 요약
- 심각도 high · CVSS 7.5 · EPSS 0.02608 · 악용난이도 moderate
🔍 공격 기법
- 트리거 조건:
get_log_file엔드포인트의{filename}파라미터에 입력된 값이 서버 측에서 적절한 Sanitization 없이 파일 경로 생성에 직접 사용됨.../시퀀스를 통한 상위 디렉토리 접근이 가능함. - 공격 단계:
- 정찰: Windmill 인스턴스의 버전 확인 및
/api/w/{workspace}/jobs_u/get_log_file/경로의 활성화 여부 스캔. - 초기 접근: 인증되지 않은 상태(Unauthenticated)에서 HTTP GET 요청을 통해 타겟 파일 접근 시도. (전제: 외부망에 API 엔드포인트 노출)
- 실행 및 정보 획득:
filename파라미터에../../../../etc/passwd와 같은 Path Traversal 페이로드 주입 $\rightarrow$ 서버 내부 민감 파일 응답 수신. (관측 지표: HTTP 200 OK와 함께 시스템 파일 내용 반환) - 권한 획득 및 지속: 유출된 설정 파일(환경 변수, DB 자격 증명 등)을 이용해 관리자 권한 탈취 시도.
- 정찰: Windmill 인스턴스의 버전 확인 및
- 공격 표면:
- 엔드포인트:
/api/w/{workspace}/jobs_u/get_log_file/{filename} - 파라미터:
{filename}(Path variable) - 프로토콜: HTTP/HTTPS
- 엔드포인트:
- CVSS 벡터 분석:
AV:N/AC:L/PR:N/UI:N은 공격자가 네트워크를 통해, 특별한 권한이나 사용자 상호작용 없이, 매우 낮은 난이도로 공격을 수행할 수 있음을 의미함.
악용 가능성: 본 취약점은 AV:N/AC:L/PR:N/UI:N 벡터가 보여주듯, 인증되지 않은 외부 공격자가 네트워크를 통해 특별한 전제 조건 없이 즉시 트리거할 수 있어 공격 난이도가 매우 낮습니다. 공격 표면은 /api/w/{workspace}/jobs_u/get_log_file/{filename} 엔드포인트의 filename 파라미터에 직접 노출되어 있으며, 입력값 검증 부재로 인해 ../ 시퀀스를 이용한 Path Traversal이 가능합니다. EPSS 수치가 0.02608로 낮고 KEV에 등재되지 않았음에도 불구하고, 이는 공격 기법의 복잡성보다는 타겟 소프트웨어의 보급률에 따른 지표일 뿐 실제 악용 가능성은 매우 높습니다. 공격자는 정찰 단계에서 해당 엔드포인트의 존재만 확인하면 즉시 /etc/passwd나 환경 설정 파일 등 서버 내 민감 정보에 접근하는 초기 침투를 수행할 수 있습니다. 특히 획득한 설정 파일 내의 DB 자격 증명이나 API 키를 이용해 권한 상승 및 내부망 이동으로 이어지는 공격 체이닝(Chaining)의 핵심 교두보가 될 가능성이 큽니다. 결과적으로 이론적 심각도를 넘어, 실전에서는 서버 전체의 기밀성을 파괴하는 치명적인 진입점으로 작용할 수 있는 취약점입니다.
💥 영향 분석
- 기술적 위험:
- 임의 파일 읽기(Arbitrary File Read): 서버 내 모든 읽기 권한이 있는 파일 유출.
- 민감 정보 노출:
/etc/passwd, 애플리케이션 설정 파일, 환경 변수(.env), SSH 키 등을 통한 추가 공격 기반 마련.
- 비즈니스 영향:
- 데이터 기밀성 파괴: 내부 코드 플랫폼의 특성상 소스 코드나 API 키 등이 유출될 경우 기업 지적 재산권 및 인프라 전체의 보안 위협으로 확산.
- 컴플라이언스 위반: 민감 데이터 유출로 인한 규제 대상 가능성.
🔗 관련 취약점·체이닝
- 추정 체이닝 경로:
Path Traversal (CWE-22)$\rightarrow$Information Disclosure$\rightarrow$Privilege Escalation / RCE. - 상세 패턴:
- Path Traversal을 통해 애플리케이션의 설정 파일이나 환경 변수 파일을 읽어 DB 패스워드나 Secret Key를 획득.
- 획득한 자격 증명을 이용해 관리자 API에 접근하거나, 세션 서명 키(Signing Key) 유출 시 세션 하이재킹을 통해 권한 상승.
- 추정: Windmill의 워크플로우 실행 기능과 결합될 경우, 탈취한 권한으로 악성 스크립트를 등록하여 원격 코드 실행(RCE)으로 이어질 가능성이 높음.
🔎 탐지
- 로그 지표: HTTP Access Log의 URI 필드에서
../또는/etc/,/proc/등의 시스템 경로 패턴 확인. - 탐지 규칙 예시:
- 패턴 기반:
URI contains "../" AND URI contains "/get_log_file/" - 정규식 기반:
\/api\/w\/.*\/jobs_u\/get_log_file\/.*(\.\.\/|\/etc\/|\/proc\/).* - 임계값 기반: 단일 IP에서 짧은 시간 내에 다수의 서로 다른 파일 경로로 요청을 보내는 행위(Directory Brute-forcing).
- 패턴 기반:
- 오탐 시나리오 및 튜닝: 정상적인 로그 파일 이름에
.이 포함된 경우 오탐 가능성 있음./get_log_file/엔드포인트에 한해서만 엄격하게../패턴을 탐지하도록 범위를 제한하여 튜닝.
🛡️ 완화 방안
- 즉시(긴급 차단): WAF(Web Application Firewall)에서
../및 시스템 경로(/etc, /var/log 등)가 포함된/api/w/*/jobs_u/get_log_file/*요청을 즉시 Drop 처리. (난이도: 낮음 / 영향: 정상 로그 조회 불가 가능성 / 검증: 페이로드 전송 시 403 Forbidden 확인) - 단기(완화): API 게이트웨이나 리버스 프록시에서 해당 엔드포인트에 대한 접근 제어 목록(ACL)을 설정하여 허용된 IP만 접근 가능하도록 제한. (난이도: 보통 / 영향: 운영 편의성 감소 / 검증: 비인가 IP 접근 차단 확인)
- 근본(해결): Windmill 버전을
1.603.3이상으로 업그레이드. (난이도: 보통 / 영향: 서비스 재시작 필요 / 검증: 버전 확인 및 패치된 엔드포인트에 Traversal 시도 시 차단 확인)
[분석 근거]
- 본 리포트는 다중 소스 데이터의 일관성이 확인되어 신뢰도가 1.0으로 검증된 사실을 바탕으로 작성됨.
- EPSS 실측값
0.02608(백분위0.83783)은 이론적 심각도와 별개로 실제 야생에서 악용될 확률이 Moderate 수준임을 나타냄. - CVSS 7.5의 높은 심각도와 인증 불필요(PR:N) 특성, 그리고 EPSS 수치를 종합하여 '이번 주 내 대응'하는
scheduled우선순위로 결정됨 (KEV 미등재 상태이나 공격 난이도가 매우 낮음).
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.5 · non-KEV · EPSS=0.02608 · exploit=moderate · in_scope=None