Skip to content

CVE-2016-7255 one-bit PTE flip privesc

Kısıtlı single-bit OR primitive'i, in-the-wild (APT28 tarafından) bir page-table entry'sinin User/Supervisor bit'ini flip etmek ve bir kernel page'i user-accessible yapmak için kullanılan bir win32k.sys elevation-of-privilege bug'ı.

Mechanism

Kırılan invariant

Bir win32k.sys local privilege-escalation kusuru (MS16-135). Ulaşılabilir defect, NtSetWindowLongPtr üzerinden tetiklenen xxxNextWindow içindedir. Primitive, serbest bir write-what-where değil, seçilmiş bir kernel adresine sabit bir bit'i OR'layan kısıtlı bir operasyondur (örn. Value = Value | 0x04, opsiyonel olarak shift'lenmiş). Patch, ilgili tagWND field'ına bir validation check ekler. Bilinen in-the-wild teknik, bu single-bit OR'u bir page-table entry'sinin User/Supervisor bit'ini flip etmek için kullandı ve bir kernel page'i user-accessible hâle getirdi — "one bit to rule a system."

Not: açık PTE U/S-bit-flip çerçevelemesi orijinal Trend Micro writeup'ından gelir; fetch edilen kaynak win32k root cause'unu, kısıtlı OR primitive'ini, MS16-135'i ve APT28 chain'ini doğrular.

Walkthrough

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

  1. User mode'dan window object'lerini manipüle et ki bir tagWND field'ı attacker tarafından etkilenir hâle gelsin.
  2. Vulnerable xxxNextWindow path'ine ulaşmak ve kısıtlı "seçilmiş bir adreste bir bit OR'la" primitive'ini elde etmek için NtSetWindowLongPtr kullan.
  3. Bit'i OR'lamanın bir page-table entry'sinin U/S bit'ini set etmeye karşılık geleceği bir target kernel adresi seç (bkz. PTE overwrite for SMEP/NX bypass).
  4. O bit'i flip et ki kernel'e ait bir page user mode'dan accessible/writable hâle gelsin.
  5. Artık user-accessible olan page'i kullanarak privileged data ya da shellcode'u stage et / patch'le.
  6. Yüksel (örn. token theft) ve SYSTEM privilege'larıyla kod çalıştır.

Detection

  • Bir privilege değişikliğinden hemen önce NtSetWindowLongPtr / window-manager API'larını çağıran beklenmeyen user process'leri.
  • Aniden SYSTEM olarak çalışan medium/low-integrity bir process (EDR'de integrity-level / token geçişleri).
  • Exploit-chain telemetrisi: Flash/browser (CVE-2016-7855) spawn etme veya inject etme, ardından local kernel EoP — dokümante edilmiş APT28 chain'i.
  • Uygun donanımda page-permission / PTE-anomali alert'leri; PatchGuard / abnormal-page telemetrisi.
  • win32k üzerinde başarısız exploitation denemelerinden kaynaklanan crash / bugcheck artışları.

Mitigation

  • win32k path'ine validation ekleyen MS16-135'i (Kas 2016) uygula.
  • Ulaşılabilirliği kesmek için sandbox'lanmış process'ler (browser'lar, Office) için Win32k system-call filtering / lockdown'ı etkinleştir.
  • Modern OS savunmaları: SMEP, KVA / page-table hardening, HVCI ve Virtualization-Based Security PTE-tipi flip'ler için çıtayı yükseltir.
  • Flash'ı (dokümante edilmiş partner CVE-2016-7855) patch'li tut ya da kaldır; attack surface'i azalt.
  • win32k EoP davranışı ve integrity-level escalation çevresinde EDR kuralları uygula.

References