[단독방어] 분석 — CVE-2026-10043
CVE-2026-10043 is a high‑severity deserialization flaw in MosaicML Composer that enables remote code execution via malicious checkpoint files, and the top priority mitigation is to immediately block loading of any untrusted checkpoints while deploying focused detection on checkpoint‑load events.
📋 요약
- 심각도 high · CVSS 7.8 · EPSS 0.00294 · 악용난이도 hard
🔍 공격 기법
공격자는 조작된 체크포인트 파일(.pkl·.pt 등)이나 해당 파일을 가리키는 원격 URL이 포함된 웹 페이지를 피해자에게 열도록 유도한다. 사용자가 페이지를 방문하거나 파일을 열면 Composer가 검증 없이 역직렬화를 수행하고, 공격자가 삽입한 파이썬 객체가 현재 프로세스 컨텍스트에서 실행된다. UI = R(사용자 상호작용) 요구지만, 파일이 로드되는 순간 자동으로 코드가 실행된다.
악용 가능성: 이 취약점은 AV:L(로컬) · AC:L(낮은 복잡도) · PR:N(권한 없음) · UI:R(사용자 상호작용 필요) 이라는 CVSS 벡터를 갖고 있어, 공격자는 대상 시스템에 로컬 접근 권한을 확보하고 피해자가 악성 페이지를 열거나 파일을 실행하도록 유도해야만 실제로 코드를 실행할 수 있습니다. 따라서 “hard” 등급이 부여된 이유는 공격 전제조건이 단순히 원격 네트워크 접속만으로는 성립되지 않으며, 사용자 행동이라는 추가적인 장벽이 존재하기 때문입니다. EPSS = 0.00294(≈0.3 %)라는 실측값은 현재까지 이 취약점이 실제 악용된 사례가 매우 드물다는 것을 보여주지만, KEV에 등재되지 않았다고 해서 위험도가 사라지는 것은 아니며, 공격 성공 시 프로세스 전체 권한으로 임의 코드를 실행할 수 있다는 점에서 여전히 실질적인 위협입니다. 트리거 조건은 MosaicML Composer가 체크포인트 파일을 역직렬화하는 단계에서 발생하므로, 파일 업로드 API, load_checkpoint() 함수 등 사용자‑제공 데이터를 직접 읽는 엔드포인트가 공격 표면이 됩니다. 해당 엔드포인트는 보통 HTTP(S) 혹은 로컬 파일 시스템 경로를 파라미터로 받아들이며, 악성 체크포인트(예: 피클 파일)를 전달하면 역직렬화 과정에서 임의 코드가 삽입될 수 있습니다. 결국 공격자는 로컬 권한을 가진 상태에서 피해자를 속여 악성 체크포인트를 열게 함으로써, 제한된 사용자 인터랙션만으로도 원격 코드 실행(RCE)을 달성할 수 있는 구조입니다.
💥 영향 분석
- 임의 코드 실행 → Composer가 구동 중인 호스트 전체에 대한 권한 탈취
- 시스템 파일·네트워크 자원 무단 접근 및 민감 데이터 유출 가능
- 서비스 중단·프로세스 크래시 등 운영 안정성 심각 악화
🔗 관련 취약점·체이닝
- CWE‑502(Deserialization of Untrusted Data)와 동일한 패턴은 Python pickle, torch checkpoint 등에 반복적으로 존재한다.
- 추정: 초기 RCE 후 메모리 손상·권한 상승 취약점과 연계해 지속적인 침투가 가능할 수 있다.
🔎 탐지
로그 지표
composer.log(또는 표준 출력) →checkpoint_load이벤트- 필드:
source_path,status(success/failure),exception(예: UnpicklingError, AttributeError) - 패턴 예시:
source_path에http://·https://스키마가 포함되거나 비정상적인 확장자(.pkl/.pt)와 함께UnpicklingError메시지가 기록됨
- 필드:
SIEM 탐지 규칙 (예시)
- 로그 소스: composer, 메시지에 “checkpoint_load” 포함 및
source_path정규식 매치sql1SELECT * FROM logs2WHERE source='composer'3 AND message LIKE '%checkpoint_load%'4 AND source_path RLIKE '^https?://'; - 파이썬 예외 로그에서 역직렬화 오류 탐지
sql1SELECT * FROM logs2WHERE source='python'3 AND (message RLIKE 'UnpicklingError' OR message RLIKE 'AttributeError')4 AND message RLIKE '\.pkl|\.pt';
- 로드 성공 여부와 관계없이 의심스러운 객체 패턴 탐지 (
__reduce__,global,obj)sql1SELECT * FROM logs2WHERE source='composer'3 AND status='success'4 AND message RLIKE '(__reduce__|global|obj).*:';
오탐 튜닝
- 내부 모델 레포지터리(예:
repo.internal.company.com)를 화이트리스트에 추가하고, 해당 도메인에서 발생하는source_path매칭을 제외한다. - 개발·테스트 환경에서도 정상적인 체크포인트 로드 시
UnpicklingError가 발생할 수 있으므로, 프로덕션 로그만 대상으로 규칙을 적용한다.
🛡️ 완화 방안
즉시(긴급 차단) – 오늘 당장 적용할 임시 조치
- Composer 설정 파일(
composer.yaml등)에allow_untrusted_checkpoints: false옵션을 추가하고, 체크포인트 디렉터리·파일에 읽기 전용 ACL을 부여해 신뢰되지 않은 경로(네트워크 공유·임시 폴더) 접근을 차단한다.- 구현 난이도: 낮음
- 운영 영향: 검증되지 않은 외부 체크포인트 로드가 즉시 실패하지만 기존 내부 파일은 정상 동작
- 검증 방법: 설정 적용 후
composer.log에 “blocked untrusted checkpoint” 메시지가 기록되는지 확인
단기(완화)
-
파일 무결성 검사 – 체크포인트 로드 전 SHA‑256 해시를 사전 정의된 화이트리스트와 비교하고, 불일치 시 로드를 차단한다.
- 난이도: 중간 (파이프라인에 해시 검증 단계 추가)
- 운영 영향: 로드 지연 수 초, 정상 파일은 통과
- 검증: 변조된 파일을 시도했을 때
checksum mismatch로그가 남는지 테스트
-
아웃바운드 네트워크 제한 – 호스트 방화벽·보안 그룹에서 Composer 프로세스의 외부 HTTP(S) 연결을 차단하고, 내부 레포지터리 IP만 허용한다.
- 난이도: 중간 (방화벽 정책 수정)
- 운영 영향: 외부 모델 다운로드 기능 비활성화, 사전 승인된 URL은 예외 처리 필요
- 검증:
netstat/ss명령으로 Composer가 외부 IP에 연결 시도가 없는지 확인
근본(해결)
- MosaicML에서 제공하는 공식 패치(최신 릴리즈) 적용 또는 최신 Composer 버전으로 업그레이드한다.
- 난이도: 높음 (서비스 재시작·호환성 테스트 필요)
- 운영 영향: 다운타임 발생 가능, 기존 파이프라인 호환 여부 검증 필수
- 검증: 패치 적용 후 동일 체크포인트 로드 시
composer.log에 역직렬화 오류가 없고 정상적으로 로드되는지 확인
잔여 리스크
- 패치 전까지는 즉시·단기 조치를 유지해야 하며, 화이트리스트 외 파일이 우회될 가능성을 지속 모니터링한다. EPSS 0.00294(실제 악용 확률 낮음)와 CVSS 7.8(고위험) 평가를 고려하면 현재 탐지·완화 조치가 위험 억제에 충분하다.
인시던트 대응 플레이북
- 알림 발생 시
composer.log에서checkpoint_load이벤트와source_path확인 - 경로가 화이트리스트에 없으면 즉시 로드 차단 및 파일 격리 수행
- 프로세스 메모리 덤프·네트워크 트래픽을 분석해 악성 페이로드 실행 여부 판단
- 침해 사실 확인 시 전 시스템 포렌식 조사 후 복구 절차 진행
우선순위 근거
다중 소스에서 일관성이 확인됐으며([교차검증] 신뢰도 1.0), CVSS 7.8·EPSS 0.00294·exploit hard인 점을 고려해 이번 주 내(scheduled) 조치를 권고한다. KEV에 등재되지 않았지만, 규칙 기반 우선순위 로직(높은 심각도 + 낮은 실측 악용 확률)으로 신속한 완화가 필요함을 판단하였다.
⚖️ 위험도 / 우선순위
- 조치: scheduled (이번 주 내)
- 근거: CVSS=7.8 · non-KEV · EPSS=0.00294 · exploit=hard · in_scope=None