Pwn2Own dual Windows kernel exploit chain (PipeAttribute + grooming)¶
Bir named-pipe "PipeAttribute / ghost chunk" kernel-address infoleak'ini, KASLR'yi yenmek için non-paged-pool grooming ile eşleyen, ardından low-privileged bir user'dan SYSTEM'e yükselmek için bir pool-corruption write süren bir Pwn2Own Windows LPE'si.
Mechanism¶
Bu, Thomas Imbert'in (Synacktiv) HITB 2023 Deep Dive into Two (Windows) Exploits Demonstrated at Pwn2Own sunumunu belgeler — cldflt.sys (Cloud Filter) ve mskssrv.sys (Microsoft Kernel Streaming Server, CVE-2023-29360) hedefli iki ayrı kernel LPE'si. "PipeAttribute + grooming" deseni, pool-corruption bug'ını güvenilir biçimde silah hâline getirmek için kullanılan data-only exploitation stratejisidir.
Note
Modern Windows kernel exploitation iki problemdir: (1) KASLR'yi kır (bulamadığını corrupt edemezsin) ve (2) mitigation'lardan sağ çık (SMEP, kCFG, HVCI/VBS code-execution payload'larını pahalı kılar ve exploit'leri data-only corruption'a iter). Chain her ikisini de named pipe'larla çözer. Pipe'lar bir grooming object'idir — adjacency'yi kontrol etmek için spray edip free ettiğin, saldırgan boyutunda birçok özdeş non-paged-pool allocation (pool feng shui). Aynı pipe'lar bir de leak object'idir: PipeAttribute / ghost-chunk leak, free edilmiş bir chunk'ın LIST_ENTRY.Flink'ini FSCTL_PIPE_GET_CONNECTION_ATTRIBUTE/PeekNamedPipe üzerinden user mode'a geri okur ve KASLR'yi yenmek için bir kernel pointer'ı verir. Elde layout ve bir adres varken, vulnerable driver'ın write'ı bir privilege/token alanını çevirmek için yüksek değerli bir object'e yönlendirilir — kernel'de hiçbir zaman saldırgan kodu çalıştırılmaz.
Walkthrough¶
Chain (örnekleyici, public Pwn2Own/HITB materyalinden):
1. GROOM: spray N same-size named pipes so non-paged pool is deterministically
laid out; free a chosen subset to open a hole next to a victim allocation.
2. LEAK (PipeAttribute / ghost chunk): free a "ghost" chunk and respray a pipe so
its data region overlaps the ghost's DQE. Read the attribute back ->
the ghost's Flink (a kernel pointer) is echoed to user mode -> KASLR broken.
3. TRIGGER: invoke the vulnerable driver:
- cldflt.sys: a restrictive-size pool overflow corrupts an adjacent
(groomed) pool chunk's header/contents.
- mskssrv.sys (CVE-2023-29360): a logical MmProbeAndLockPages AccessMode
bug locks/maps an attacker-supplied KERNEL address into user space,
giving direct kernel R/W of that page.
4. ESCALATE (data-only): use the R/W to overwrite a token/privilege field
(e.g. swap in the SYSTEM token or set EPROCESS.Token), then spawn a SYSTEM shell.
mskssrv.sys neden temiz bir primitive
CVE-2023-29360 için MmProbeAndLockPages yanlış AccessMode ile çağrılır,
dolayısıyla driver user'ın verdiği buffer'ın user space'te durduğunu doğrulayamaz.
Kernel bir VA sağlamak, driver'ın onun için bir MDL kurmasına ve caller'a geri
map'lemesine yol açar — saldırgan artık o kernel page'ini user mode'dan doğrudan
okur/yazar. Exploit onu mevcut process'in privilege'lerini tutan page'e yönlendirip
onları düzenler, ROP gerekmez.
Not: Bu chain'de kullanılan CVE-2023-29360 (Haziran 2023 yaması, MmProbeAndLockPages
AccessMode logic bug), aynı mskssrv.sys driver'ında olan ama ayrı bir bug olan
CVE-2023-36802'den (Eylül 2023 yaması, Streaming Service Proxy'de type-confusion/UAF,
in-the-wild 0-day) farklıdır — ikisini karıştırmayın.
Warning
Zaten ifşa edilmiş, yamalı public materyalden (Pwn2Own demo + HITB slaytları) savunma/eğitim amaçlı yeniden kurgulama. Mesele desentir — zararsız görünen bir IPC echo + data-only corruption yoluyla leak — anahtar teslim bir silah değil.
Detection¶
- Aynı boyutta named pipe'ları toplu oluşturup/free eden,
FSCTL_PIPE_GET_CONNECTION_ATTRIBUTEçağıran, sonracldflt/mskssrv'a olağandışıDeviceIoControlçağrıları yapan bir process son derece anormaldir. - HVCI/Special Pool/Driver Verifier pool overflow'u yüzeye çıkarır; unprivileged bir process'e yapılan token/privilege düzenlemeleri post-exploit saptanabilir.
Mitigation¶
- CVE-2023-29360'ı (Haziran 2023) ve cldflt cloud-filter düzeltmelerini yamalayın.
- HVCI/VBS, kCFG, Segment Heap ve LFH randomization hem leak'in (adjacency) hem de corruption'ın (bir hedefi bulma/üzerine yazma) maliyetini yükseltir.
References¶
- HITB2023HKT — Windows Kernel Security: A Deep Dive into Two Exploits Demonstrated at Pwn2Own (Thomas Imbert)
- Project Zero — Spoofing Named Pipe Client PID (named-pipe attribute mechanism)
- CVE-2023-29360 (Microsoft Streaming Server mskssrv.sys EoP)
- NVD — CVE-2023-29360 Detail (Microsoft Streaming Service EoP)