Skip to content

BYOVD - Dell dbutil_2_3.sys LPE (CVE-2021-21551)

Dell'in firmware-update driver'ı IOCTL interface'inde hiçbir ACL ile gelmez; bu yüzden unprivileged herhangi bir user, source, destination ve length argümanları tamamen attacker-controlled olacak şekilde memmove çağırabilir — sonuçta arbitrary kernel R/W ve SYSTEM'e local privilege escalation elde edilir.

Mechanism

Note

IOCTL input buffer'ını doğrudan memmove(dst, src, len) içine geçiren — ve iki pointer'dan birinin güvenli bir kernel aralığında olup olmadığını validate etmeyen — bir kernel driver, ring 0'da write-what-where koşulu sağlar. dbutil_2_3.sys kendi device object'i üzerinde hiçbir ACL ayarlamadığı için, herhangi bir user-mode process device handle'ını açıp IOCTL'i invoke edebilir. Kernel bellek, src olarak bir kernel adresi ve dst olarak bir user-space buffer verilerek okunabilir; roller ters çevrilerek de yazılabilir. Privileged bir token'ı bulmak için standart EPROCESS walking ile birleştirildiğinde bu, başka herhangi bir güvenlik açığına ihtiyaç duymadan SYSTEM-level LPE için yeterlidir.

Walkthrough

Affected driver: dbutil_2_3.sys v2.3 — Dell SupportAssist ve firmware updater paketleriyle dağıtılan Dell firmware-update bileşeni. Yaklaşık 2009'dan beri yüz milyonlarca Dell Windows cihazında shipping edilmektedir.

CVE: CVE-2021-21551 (CVSS 8.8; SentinelLabs tarafından açıklandı, Dell'e 2020-12-01 tarihinde raporlandı, Dell DSA-2021-088 ile patch'lendi).

Device symbolic link: \\.\DBUtil_2_3

IOCTL codes:

Code Operation
0x9B0C1EC4 Arbitrary kernel memory read (okuma)
0x9B0C1EC8 Arbitrary kernel memory write (yazma)

Input buffer layout (4-element QWORD array):

[0]  filler             (e.g. 0x4141414141414141)
[1]  target address     (kernel dst for write / kernel src for read)
[2]  zero / reserved
[3]  data payload       (value to write) or receives read result

Driver, buffer'ın en az 0x18 byte olduğunu validate eder, offset 0x08'deki adresi ve offset 0x18'deki data'yı okur, ardından pointer'lar üzerinde herhangi bir range check yapmadan memmove çağırır.

Conceptual exploitation path:

1. OpenFile("\\.\DBUtil_2_3")       // no ACL — succeeds as low-priv user
2. Read PsInitialSystemProcess       // via 0x9B0C1EC4 to get SYSTEM EPROCESS
3. Walk EPROCESS ActiveProcessLinks  // find own process EPROCESS
4. Read SYSTEM Token field           // from SYSTEM EPROCESS + token offset
5. Write SYSTEM Token into own       // via 0x9B0C1EC8 → overwrite token field
   process EPROCESS token field
6. Spawn cmd.exe → nt authority\system

Beş CVE alt-sorununun arasında ayrıca doğrudan I/O port access (IN/OUT instruction'ları) da bulunur; bu, filesystem kontrollerini bypass ederek doğrudan disk sektörlerine yazmak için kullanılabilir.

Warning

SentinelLabs, token pointer'ının kendisi yerine _SEP_TOKEN_PRIVILEGES bitmap field'larını (Present ve Enabled) hedefleyen data-only bir variant yayınladı; bu, exploitation'ı token-pointer monitoring ile tespit etmeyi zorlaştırır.

Detection

  • Driver hash blocklist: LOLDrivers, bilinen dbutil_2_3.sys variant'ları için üç SHA-256 hash dokümante eder:
  • 0296e2ce999e67c76352613a718e11516fe1b0efc3ffdb8918fc999dd76a73a5
  • 87e38e7aeaaaa96efe1a74f59fca8371de93544b7af22862eb0e574cec49c7c3
  • ddbf5ecca5c8086afde1fb4f551e9e6400e94f4428fe7fb5559da5cffa654cc1 (Tam liste: loldrivers.io)
  • Device open: Legitimate Dell update tooling dışındaki process'lerden \\.\DBUtil_2_3 hedefleyen herhangi bir CreateFile çağrısında alert üret.
  • ETW: dbutil_2_3.sys için driver load (ImageLoad) event'i; yükleyen process'in bilinen bir Dell updater olduğunu doğrula. Sertifika ilk açıklamada revoke edilmemişti, dolayısıyla tek başına signature geçerliliği yetersizdir.
  • IOCTL monitoring: 0x9B0C1EC4 / 0x9B0C1EC8 code'lu DeviceIoControl çağrılarını logla.
  • Token change detection: _EPROCESS.Token değişikliklerini izleyen EDR ya da kernel callback'leri (ör. token karşılaştırmasıyla birleştirilen PsSetCreateProcessNotifyRoutine) privilege swap'i yakalayabilir.
  • Sysmon / WDAC audit: Driver hash'i için Sigma rule'ları ve Sysmon config'leri LOLDrivers üzerinde yayınlanmıştır.

Mitigation

  • Apply Dell DSA-2021-088: Dell patch'li bir driver yayınladı; vulnerable sürüm kaldırılıp değiştirilmelidir. Dell'in advisory'si bir removal tool içerir.
  • Microsoft Vulnerable Driver Blocklist: dbutil_2_3.sys hash'leri, WDAC tarafından enforce edilen Microsoft önerilen driver block list'ine dahildir.
  • HVCI: Hypervisor-Protected Code Integrity gereksinimlerini karşılamayan driver'ların yüklenmesini engeller ve kernel memory corruption primitive'lerinden gelen zararı sınırlar.
  • WDAC deny policy: Sertifikaya (etkilenen sürüm için Dell Inc. firmware signing cert) ya da belirli bir file hash'e göre engelle.
  • Restrict Dell tooling: Dell SupportAssist / firmware updater gerekli değilse, kaldır ya da application control policy ile engelle.
  • Driver ACL hardening (development): Device object'ler üzerinde her zaman kısıtlayıcı bir security descriptor ayarla; kernel R/W açan herhangi bir driver için SeLoadDriverPrivilege ya da açık bir ACL girdisi iste.

References