Skip to content

HEVD Type Confusion scenario

HackSys Extreme Vulnerable Driver type-confusion IOCTL'inin kavramsal kataloğu: user'ın sağladığı bir field daha sonra bir kernel callback function pointer'ı olarak yorumlanır.

Mechanism

Eğitim amaçlı bug

User mode, düz veri gibi davrandığı küçük bir object structure'ı (ObjectID, ObjectType) sağlar. Kernel bunu, layout'u farklı olan bir kernel object'e kopyalar: ikinci member, daha sonra bir Callback function pointer'ı olarak yorumlanan bir union'ın parçasıdır. Driver field'ı type doğrulaması yapmadan kopyaladığı için, kernel daha sonra attacker'ın sağladığı veri üzerinden bir indirect call gerçekleştirir.

Sınır, kernel "callback"i çağırdığında aşılır — control flow kernel context'inde attacker'ın seçtiği bir adrese aktarılır.

Walkthrough

Üst seviye (Plackyhacker, HEVD repo):

  1. Device'ı aç; kernel'in callback pointer'ı olarak ele alacağı field'a attacker'ın seçtiği bir adresi yerleştirerek küçük object buffer'ını oluştur.
  2. Onu type-confusion IOCTL'i üzerinden gönder.
  3. Kernel object'ini allocate eder, karıştırılan field'ı kopyalar, ardından callback'i çağırır — attacker kontrollü flow'u execute eder.
  4. Token hırsızlığı ile bitir (bkz. eprocess-token-stealing).

Modern kısıt

Güncel hedeflerde callback meşru bir kernel adresine işaret etmelidir (ROP / data-only) çünkü SMEP/DEP/KASLR doğrudan user shellcode'a işaret etmeyi engeller.

Detection

  • User-mode veya non-image adreslere düşen indirect kernel call'ları.
  • Doğrudan user input'tan gelen bir callback pointer'ı çağıran bir driver.
  • Indirect call üzerinde CFG ihlalleri.
  • Crafted structure'larla type-confusion control code'una giden IOCTL trafiği.

Mitigation

  • Bir field'ı function pointer olarak ele almadan önce strong typing / tagged union'lar ve doğrulama.
  • User memory'ye veya geçersiz hedeflere giden call'ları engellemek için SMEP
  • kCET/CFG.
  • Kolay kernel target çözümlemesini engellemek için KASLR; HVCI.

References