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.
- User mode'dan window object'lerini manipüle et ki bir
tagWNDfield'ı attacker tarafından etkilenir hâle gelsin. - Vulnerable
xxxNextWindowpath'ine ulaşmak ve kısıtlı "seçilmiş bir adreste bir bit OR'la" primitive'ini elde etmek içinNtSetWindowLongPtrkullan. - 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).
- O bit'i flip et ki kernel'e ait bir page user mode'dan accessible/writable hâle gelsin.
- Artık user-accessible olan page'i kullanarak privileged data ya da shellcode'u stage et / patch'le.
- 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.