Skip to content

CVE-2017-14961 IKARUS write-where -> PALETTE arbitrary R/W

IKARUS anti-virus ntguard.sys driver'ındaki bir fixed-value write-where; GDI PALETTE object'lerini corrupt ederek tam arbitrary kernel read/write'a dönüştürüldü.

Mechanism

Kırılan invariant

IKARUS anti.virus 2.16.7'nin ntguard.sys driver'ı, bir IOCTL'den (herkese açık olarak 0x8300000c olarak raporlanan) output-buffer pointer'ını validate etmez ve bir fixed-value write primitive'i verir — attacker tarafından kontrol edilen bir kernel adresine 0x11 byte'ını yazar (kısıtlı bir "write-where"). Kernel, kullanıcı tarafından sağlanan bir destination adresine güvendiği için unprivileged kod komşu kernel object'lerini corrupt edebilir. Writeup, bu sınırlı write'ı session-pool spraying üzerinden GDI PALETTE object internal'larını corrupt ederek tam bir arbitrary read/write'a dönüştürür (bkz. GDI palette R/W primitive).

Walkthrough

Herkese açık writeup'tan çıkarılan kavramsal, üst-düzey reprodüksiyon.

  1. Seçilmiş bir kernel konumuna 0x11 yazmak için IOCTL'i boş bir input buffer'ı ve kontrol edilen bir output adresiyle tetikle.
  2. Öngörülebilir session-pool adreslerinde iki komşu PALETTE object'ini (her biri ~0x1000 byte) groom etmek için pool-spray yap (window reservation / free cycling).
  3. İlk palette'in cEntries (count) field'ını overwrite etmek için fixed-byte write'ı kullan ve raporlanan boyutunu şişir (out-of-bounds entry aralığı).
  4. İkinci "worker" palette'in pFirstColor pointer'ını overwrite etmek için aşırı boyutlu "manager" palette'ini kullan ve onu arbitrary bir adrese yönlendir.
  5. Arbitrary kernel belleğini okumak / yazmak için worker palette üzerinde GetPaletteEntries / SetPaletteEntries çağır.
  6. Arbitrary R/W kurulduğunda, SYSTEM'a yükselmek için token theft gerçekleştir.

Detection

  • ntguard device'ına bir handle açan ve ona karşı IOCTL'ler issue eden non-admin process'ler.
  • ntguard.sys'e ya da GDI/win32k pool corruption'a referans veren crash'ler / bugcheck'ler (başarısız spray'ler).
  • Tek bir user process'ten anormal hacimde palette/GDI object creation + free (spray signature'ı).
  • AV driver'ıyla az önce konuşmuş bir process'te token / integrity-level escalation.
  • Bir güvenlik-ürünü driver'ına şüpheli DeviceIoControl üzerine EDR alert'leri.

Mitigation

  • IKARUS'u, IOCTL buffer'ını validate eden fixed build'e (2.16.18, driver 0.43.0.0) güncelle.
  • Device-object ACL'lerini kısıtla ki yalnızca privileged caller'lar IOCTL'i issue edebilsin.
  • GDI / session-pool hardening: daha yeni Windows'ta type isolation ve pool integrity palette/bitmap primitive'inin güvenilirliğini azaltır.
  • HVCI / driver allow-listing (WDAC) ve vulnerable signed driver'ları kaldırma (BYOVD duruşu).
  • Bilinen-vulnerable driver sürümlerini izle ve bloke et.

References