MLflow Webhook 테스트 엔드포인트 SSRF(서버 측 요청 위조) 취약점 (CVE-2026-64849)
실무자 핵심 요약 (Executive Summary)
SECOPS ASSESSMENTMLflow 버전 3.3.0 이상 3.15.0 미만 버전
인증되지 않은 공격자가 내부 네트워크 자원 및 클라우드 메타데이터 서비스(IMDS)에 접근하여 민감한 자격 증명 및 데이터를 탈취할 수 있습니다.
MLflow 버전을 3.15.0 이상으로 즉시 업그레이드하고, 패치 적용 전까지 외부 웹훅 테스트 엔드포인트 접근을 제한하십시오.
영향받는 제품 및 버전 범위
권장 패치 및 임시 완화(Workaround) 가이드
PATCH & WORKAROUND1. 공식 패치 적용 (권장)
MLflow 버전을 3.15.0 이상으로 업그레이드하십시오. 이 버전에서는 리다이렉트 시에도 대상 주소를 재검증하고 고정하는 로직이 반영되었습니다.
# pip를 사용하는 경우
pip install --upgrade mlflow>=3.15.0
# poetry를 사용하는 경우
poetry add mlflow@latest2. 임시 완화 조치 (패치 적용 전)
즉각적인 업그레이드가 어려운 경우, 다음과 같은 네트워크 및 인프라 수준의 완화 조치를 적용하십시오.
- WAF(웹 애플리케이션 방화벽) 규칙 적용:
/api/2.0/mlflow/webhooks/.*/test 경로로 인입되는 외부 요청을 차단하십시오.
- 클라우드 메타데이터 서비스(IMDS) 보호:
AWS 환경의 경우 IMDSv2를 필수로 활성화하고 홉 제한(Hop Limit)을 1로 설정하여 컨테이너/포드 내부에서 메타데이터에 접근하는 것을 방지하십시오.
- 네트워크 아웃바운드 제한:
MLflow 서버가 실행되는 컨테이너 또는 인스턴스에서 내부 사설 IP 대역(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) 및 링크 로컬 주소(169.254.169.254)로의 아웃바운드 요청을 방화벽(Security Group, NetworkPolicy 등)을 통해 차단하십시오.
실행 중인 Docker 컨테이너와 Kubernetes 클러스터의 컨테이너 탈출 및 권한 상승을 실시간 감시하세요
이미지 빌드 시점뿐 아니라 실제 운영 중인 클러스터 내부의 eBPF 기반 커널 이벤트와 잘못된 IAM/RBAC 구성을 실시간으로 감사하고 경보를 받으세요.
취약점 발생 원리 및 공격 메커니즘
MLflow AI 엔지니어링 플랫폼에서 심각한 수준의 서버 측 요청 위조(SSRF, CWE-918) 취약점이 발견되었습니다. 이 취약점은 인증이 필요 없는 POST /api/2.0/mlflow/webhooks/{id}/test 엔드포인트에서 발생합니다.
취약점 발생 원인 및 메커니즘:
- 불완전한 검증: MLflow의
mlflow/utils/validation.py내_validate_webhook_url()함수는 사용자가 제공한 최초 URL에 대해서만 유효성 검증을 수행합니다. - 리다이렉트 추적 및 재해석: 실제 웹훅 요청을 전송하는
mlflow/webhooks/delivery.py모듈은 HTTP 리다이렉션(3xx)을 허용하며, 검증된 IP 주소를 고정(Pinning)하지 않은 채 호스트 이름을 다시 해석(Re-resolve)합니다. - 우회 공격: 공격자는 검증을 통과하는 외부 도메인을 입력한 후, 해당 도메인이 내부 IP 주소(예: 루프백 주소
127.0.0.1또는 클라우드 메타데이터 서비스 주소169.254.169.254)로 리다이렉트되도록 설정하여 검증 로직을 우회할 수 있습니다.
파급력: 이 취약점은 CVSS 9.3의 치명적(Critical) 등급으로 평가되었으며, CISA KEV(악용된 취약점 카탈로그)에 등재되어 실제 공격에 악용되고 있음이 확인되었습니다. 공격자는 이 취약점을 통해 내부 네트워크의 비공개 서비스에 접근할 수 있을 뿐만 아니라, AWS/GCP/Azure 등 클라우드 환경의 메타데이터 서비스(IMDS)로부터 임시 자격 증명(IAM Credentials)을 탈취하여 클라우드 인프라 전체를 장악할 수 있습니다.
공식 보안 권고문 및 참조 링크
MLflow is an open source AI engineering platform for agents, large language models, and machine learning models. Starting in 3.3.0 and prior to 3.15.0, the unauthenticated POST /api/2.0/mlflow/webhooks/{id}/test endpoint calls _validate_webhook_url() in mlflow/utils/validation.py only for the original URL while mlflow/webhooks/delivery.py follows redirects and re-resolves the hostname without pinning the validated address, allowing attackers to reach internal or cloud metadata services and receive response_status and response_body. This issue is fixed in version 3.15.0.
일간 취약점 브리핑 및 긴급 Zero-Day 경보 구독
보안 실무자와 인프라·백엔드 엔지니어를 위해 매일 아침 주요 취약점과 패치 우선순위를 요약해 발송합니다.