Skip to content

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, sonra cldflt/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