MLflow 서버를 운영 중이라면 이번 CVE-2026-64849는 가볍게 넘길 문제가 아니다. 운영 중인 인스턴스의 자격증명을 실시간으로 유출시킬 수 있는 위협이다. MLflow 웹훅 전송 단계에서 발생하는 인증 없는 SSRF(Server-Side Request Forgery, CWE-918) 취약점으로, 공격자가 클라우드 인스턴스 메타데이터 서비스(AWS IMDS 등)에 서버가 HTTP 요청을 보내게 만들어 IAM 자격증명·시크릿을 탈취하거나 내부 전용 관리 서비스에 직접 접근하는 것이 핵심 위험이다. CVSS 3.1 기준 9.3(Critical)이며, CISA Known Exploited Vulnerabilities(KEV) 카탈로그에 등재되어 야생(active) 악용이 확인된 상태다.
CVE-2026-64849 한눈 요약
| 항목 | 내용 |
|---|---|
| CVE ID | CVE-2026-64849 |
| 분류 | CWE-918 Server-Side Request Forgery |
| CVSS 3.1 | 9.3 (Critical) — AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N |
| 영향 버전 | 3.15.0 미만 |
| 인증 여부 | 불필요 (Unauthenticated) |
| KEV 등재일 | 2026-08-19 |
| FCEB 대응 기한 | 2026-09-02 |
| 공격 벡터 | POST /api/2.0/mlflow/webhooks/{id}/test |
※ 일부 국내 보도에서는 FCEB 대응 기한을 2026-09-03으로 전달했으나, CISA 공식 카탈로그·NVD 기재 값은 2026-09-02이다.
공격 원리: validatewebhook_url 우회와 리다이렉트 재검증 누락
3.10.0에 도입된 가드와 그 한계
MLflow 3.10.0에는 웹훅 URL 검증 함수 _validate_webhook_url이 추가되었다. 이 함수는 웹훅 호스트명을 해석하여 비공개 IP를 거부하는 가드 역할을 한다. 코드 레벨에서 _MLFLOW_WEBHOOK_ALLOWED_SCHEMES 기본값은 ["https"]이고, _MLFLOW_WEBHOOK_ALLOW_PRIVATE_IPS 기본값은 False로 설정되어 있어, 1차 URL 검증 단계에서 루프백·링크로컬 주소가 차단된다.
리다이렉트 우회 경로
그러나 이 검증은 최초 요청 호스트명에서만 수행된다. 전달(delivery) 과정에서 HTTP 리다이렉트를 따라가는데, 리다이렉트 대상에 대해서는 재검증을 하지 않아 우회가 가능하다. 구체적으로, 공격자가 공개 HTTPS 호스트에서 302 응답으로 http://169.254.169.254/... 또는 http://127.0.0.1:...를 반환하도록 하면 MLflow는 해당 주소로 요청을 그대로 이어가며 재검증하지 않는다. allow_redirects=False가 설정되어 있지 않고, 연결 시점에 검증된 IP를 고정(pinning)하지 않는 구조적 결함이다.
기본 MLflow 트래킹 서버는 mlflow server로 기동 시 필수 인증 없이 SQLite 백엔드로 동작하며, 모델 레지스트리 웹훅 API가 신뢰할 수 없는 트래픽에 그대로 노출된다. 이 조건에서 POST /api/2.0/mlflow/webhooks/{id}/test 엔드포인트는 업스트림 응답의 상태 코드와 본문(response_status, response_body)을 호출자에게 원문 그대로 되돌려준다. 즉, 표준 블라인드 SSRF에 그치지 않고 응답을 통째로 읽어들이는 풀리드(full-read) 프리미티브로 전환된다. /test 경로가 응답 본문을 그대로 반환하기 때문에, 기본 서버 환경에서는 인증 없이 전체 응답을 읽을 수 있다.
실제 위험: 클라우드 메타데이터 자격증명 탈취
이 취약점을 통한 실제 피해 경로는 다음과 같다.
- 클라우드 인스턴스 메타데이터 노출: 169.254.169.254(AWS IMDS)로 요청을 유도하면 IAM 자격증명·OAuth 토큰이
/test응답 본문에 그대로 반환될 수 있다. - 내부 전용 관리 서비스 접근: 네트워크 경계 뒤의 사내 관리 엔드포인트에 서버가 직접 요청을 보내 응답을 읽을 수 있다.
- 내부 포트·호스트 스캔: 내부 네트워크의 호스트와 포트 존재 여부를 응답 상태 코드로 탐지할 수 있다.
- 블라인드 쓰기(307/308 변형): 307/308 리다이렉트는 원래 POST 메서드와 본문을 보존한다. 공격자가 제어하는 페이로드를 사내 관리 엔드포인트(Docker daemon, Elasticsearch, Spring Boot Actuator 등)로 POST할 수 있는 경로가 열린다.
왜 지금 위험한가: CISA KEV 등재와 야생 악용
CISA는 2026년 8월 19일, 활성 악용(active exploitation) 증거를 근거로 CVE-2026-64849를 KEV 카탈로그에 등재했다. 등재 사유는 “MLflow contains a server-side request forgery vulnerability that can allow attackers to reach internal or cloud metadata services and receive responsestatus and responsebody”로 명시되어 있다.
BOD 26-04에 따라 연방민간기관(FCEB)은 2026-09-02까지 대응 조치를 완료해야 하며, CISA는 모든 조직에 KEV 취약점의 우선 조치를 권고하고 있다. 일부 보도에서는 2026-09-03 기한이 인용되기도 하나, CISA 공식 카탈로그 기재 값은 2026-09-02이다.
KEV 등재는 이 취약점이 이론적 위험을 넘어 실제 공격에 사용되고 있음을 의미한다. CISA가 “evidence of active exploitation”을 근거로 단 1건을 추가한 이례적 상황이므로, 인터넷에 노출된 MLflow 인스턴스가 이미 스캔·공격 대상에 포함되었을 가능성을 전제로 대응해야 한다.
영향 버전과 추가 공격 변형
3.15.0 미만 전 버전 영향
CVE-2026-64849는 3.15.0 미만 MLflow 버전에 영향을 준다. 3.10.0에 도입된 _validate_webhook_url 가드 자체가 리다이렉트 재검증과 IP 고정 결함으로 인해 우회 가능한 상태였으므로, 3.10.0 이상을 사용하고 있더라도 이 취약점에서 안전하지 않다.
307/308 블라인드 쓰기
302 리다이렉트는 GET으로 전환되지만, 307/308은 원래 POST 메서드와 본문을 보존한다. 이를 이용하면 공격자가 사내 관리 엔드포인트로 POST 본문을 삽입하는 블라인드 쓰기 공격이 가능해진다. Docker daemon의 /stop, Elasticsearch의 /_close, Spring Boot Actuator의 /shutdown과 같은 관리 API가 대상이 될 수 있다.
DNS 리바인딩(TOCTOU)
리다이렉트 우회와 별개로, DNS 리바인딩을 이용한 검증 회피 경로도 존재한다. _validate_webhook_url이 호스트명을 해석하여 IP를 검증한 시점과 실제 연결 시점 사이에 DNS 응답이 변경되면, 검증에서는 공개 IP가 확인되고 실제 연결에서는 내부 주소로 접속할 수 있다.
대응 방안
아래 조치는 CISA KEV 대응 기한(2026-09-02) 이전까지 완료할 것을 권고한다.
- 버전 업그레이드: 3.15.0 미만 MLflow Tracking Server를 즉시 3.15.0 이상으로 업그레이드한다. 3.15.0에 포함된 PR #24258은 연결 시점 IP 검증(SSRFProtectedHTTPAdapter)을 도입하여 리다이렉트 우회와 307/308 블라인드 쓰기 변형, 그리고 DNS 리바인딩(TOCTOU) 경로를 함께 해결하므로, DNS 리바인딩에 대한 별도 조치는 필요 없다. 인터넷에 노출된 서버는 최우선 대상이다.
- 웹훅 /test 요청 로그 감사:
POST /api/2.0/mlflow/webhooks/*/test엔드포인트에 대한 접근 로그를 전수 점검하여, 169.254.169.254 또는 127.0.0.1로 응답이 반환된 기록이 있는지 확인한다. 이미 유출된 자격증명은 패치로 회수되지 않으므로, 의심 요청이 발견되면 즉시 해당 시크릿을 무효화한다. - 클라우드 IAM 키·API 시크릿 로테이션: MLflow 인스턴스가 동작하는 클라우드 VM(예: AWS EC2)의 IMDS 자격증명, 관련 API 키, 토큰을 전면 로테이션한다.
- 링크로컬 메타데이터 주소 이그레스 차단: MLflow 서버의 네트워크 이그레스 규칙에서 169.254.169.254(링크로컬 메타데이터) 및 127.0.0.0/8(루프백)로 향한 출력을 차단한다.
- 웹훅 API 인증 적용: 기본 SQLite 백엔드·무인증 구성을 사용하고 있다면, 웹훅 API에 인증 레이어(리버스 프록시 토큰, mTLS, 네임스페이스 격리 등)를 반드시 적용한다.
CISA KEV 등재는 “대응할 시간”이 아니라 “이미 공격받고 있을 수 있다”는 신호다. MLflow 서버가 운영 중인 인프라에서는 위 항목을 2026-09-02 기한과 무관하게 즉시 실행하자.