/custom and /hex parameters) without resorting to the use of the WacomInstallI.txt file to pass parameters to Remove.exe.Remove.exe by passing it those parameters since probably, when Wacom will fix ZDI-CAN-16318, WacomInstallI.txt will no longer be accessible by the regular user (or at least I hope... 🤞).Remove.exe by passing it the /custom parameter through C:\Program Files\Tablet\Wacom\PrefUtil.exe, since here it's written that individual users can configure their own Wacom device settings using the Wacom Tablet Preference File Utility (PrefUtil.exe).PrefUtil.exe however, instead of finding what I was looking for, I noticed some suspicious operations and I decided to call off the search to analyze them in detail; their analysis led me to discover the vulnerability I'm about to describe.Remove.exe by passing it the /custom and\or /hex parameter) 🙁PrefUtil.exe, I noticed (using Process Monitor) that, by pressing the "Package logs" button, the C:\Wacom and C:\Wacom\Logs folders are created and the files indicated in the image below are copied into them.
C:\Wacom\Logs folder are log files used for diagnostic purposes, and there would be nothing wrong with these operations if it weren't for these two facts:
WTabletServicePro.exe service which is running under the context of SYSTEM.
C:\Wacom and C:\Wacom\Logs folders.
WTabletServicePro.exe service without impersonating the regular user, Wacom_Tablet.bak.txt, Wacom_Tablet.dat.txt and WacomTouch.xml.txt are the most interesting because they're nothing more than the respective copy of %AppData%\WTablet\Wacom_Tablet.bak, %AppData%\WTablet\Wacom_Tablet.dat and %AppData%\WTablet\WacomTouch.xml with the addition of the .txt extension, as you can see from the image below.
%AppData%\WTablet folder and all the files it contains, he can replace one of these files (I chose %AppData%\WTablet\WacomTouch.xml) with another one of his choice before clicking on the "Package logs" button and, as a consequence, the file chosen by the regular user will be copied by WTabletServicePro.exe to the C:\Wacom\Logs folder.WTabletServicePro.exe, forcing it to copy a file of our choice wherever we want, thus obtaining an Arbitrary File Write primitive ✔️WTabletServicePro.exe to an already existing file, that file will be overwritten (otherwise it will be created).PrefUtil.exe to trigger the "Package logs" function but, obviously, I didn't find anything useful because, by pressing the button, PrefUtil.exe doesn't need to call itself with a special parameter as it can directly call its "Package logs" function 🤦PrefUtil.exe modules via x64dbg (as I did here) hoping to find the right parameter, and I was lucky because I found a reference to the /package-logs parameter!PrefUtil.exe through C:\Program Files\Tablet\Wacom\PrefUtil.exe /package-logsWacom_Tablet.exe, during the restore operation, tries to load (under the context of SYSTEM) the missing FTD2XX.dll dll following the Dynamic-Link Library search order, as you can see from the image below.
PrefUtil.exe and Wacom_Tablet.exe, discovering (in the same way I discovered /package-logs) that PrefUtil.exe accepts the /remove parameter and, if run with that, triggers Wacom_Tablet.exe (many other operations are also performed, but their description is beyond the scope of this report) which, as shown in the previous image, tries to load the missing FTD2XX.dll dll.FTD2XX.dll through the Phantom DLL hijacking technique (which is only one of the various DLL Hijacking techniques) by performing the following simple steps:
FTD2XX.dll which, once loaded, opens the Windows Command Prompt.
PrefUtil.exe to copy the DLL into one of the folders where Wacom_Tablet.exe looks for it (I chose C:\Program Files\Tablet\Wacom).
Wacom_Tablet.exe to load the malicious FTD2XX.dll via C:\Program Files\Tablet\Wacom\PrefUtil.exe /remove.
FTD2XX.dll using the following C++ code:
Wacom_Tablet.exe doesn't use signed DLLs or particular DLL hijacking prevention techniques.C:\Program Files\Tablet\Wacom\32\Installer.datInstaller.dat file to run an arbitrary program but, in this case, everything is much easier because we can exploit an Arbitrary File Write primitive (and not an Arbitrary File Write primitive with partial control over the content of the file written\overwritten).Installer.dat with another identical file to which the following line has been added:
"C:\Program Files\Tablet\Wacom\PrefUtil.exe" /restore "C:\...\Backup.wacomprefs" /silent to force Remove.exe to execute the UpdateRouterFilter command which, consequently, will execute a command prompt window under the context of SYSTEM.
C:\Program Files\Tablet\Wacom\32\Remove.exeInstaller.dat we can directly overwrite (exploiting the Arbitrary File Write primitive previously described) Remove.exe with a simple executable which, once started, will execute a command prompt window, like this one:
"C:\Program Files\Tablet\Wacom\PrefUtil.exe" /restore "C:\...\Backup.wacomprefs" /silent to force Wacom_Tablet.exe (which runs under the context of SYSTEM) to execute Remove.exe which, consequently, will execute a command prompt window under the same context.Remove.exe to carry out all the operations it has to perform once started (since we have replaced it), while the previous technique is not affected by this problem because it simply forces Remove.exe to perform one more operation (the execution of the command prompt window) than the ones it has to execute normally.
C:\Wacom folder exists, delete it and re-create it; create it otherwise.
C:\Wacom\Logs mount point to \RPC Control.
\RPC Control\WacomTouch.xml.txt symbolic link to %ProgramFiles%\Tablet\Wacom\FTD2XX.dll.
FTD2XX.dll to %AppData%\WTablet\WacomTouch.xml.
PrefUtil.exe through %ProgramFiles%\Tablet\Wacom\PrefUtil.exe /package-logs.PrefUtil.exe starts to package the logs into C:\Wacom\Logs.
WTabletServicePro.exe, running under the context of SYSTEM, tries to copy %AppData%\WTablet\WacomTouch.xml to C:\Wacom\Logs\WacomTouch.xml.txt without impersonating the current user.
C:\Wacom\Logs is a mount point to \RPC Control, WTabletServicePro.exe tries to copy %AppData%\WTablet\WacomTouch.xml to \RPC Control\WacomTouch.xml.txt.
\RPC Control\WacomTouch.xml.txt is a symbolic link to %ProgramFiles%\Tablet\Wacom\FTD2XX.dll, WTabletServicePro.exe copies %AppData%\WTablet\WacomTouch.xml to %ProgramFiles%\Tablet\Wacom folder and names it FTD2XX.dll.
PrefUtil.exe through C:\Program Files\Tablet\Wacom\PrefUtil.exe /silent /remove.PrefUtil.exe performs several operations and Wacom_Tablet.exe is triggered.
Wacom_Tablet.exe performs several operations and tries to load the %ProgramFiles%\Tablet\Wacom\FTD2XX.dll dll.
FTD2XX.dll now exists (point 5.4), it's loaded into memory and executed (without any checks).
FTD2XX.dll is programmed to execute a command prompt window and, since it's loaded from Wacom_Tablet.exe (which runs under the context of SYSTEM), the command prompt will also run under the same context, allowing us to escalate our privileges 🎉
CreateMountPoint.exe and CreateSymlink.exe are programs developed by James Forshaw and are downloadable from his symboliclink-testing-tools repository, respectively here and here.
C:\Wacom\Logs.C:\Wacom folder (and its sub-folders) on the C:\ drive and, more generally, in a location to which the regular user has full access (pay attention! As I explained here, also the C:\Windows\Temp folder isn't a good candidate, although the regular user doesn't have full access to it).Logs folder in %ProgramFiles%\Tablet\Wacom\, where the regular user can't write to and, consequently, can't perform the previously described attack. In fact, in this case, WTabletServicePro.exe can't be redirected while copying %AppData%\WTablet\WacomTouch.xml to %ProgramFiles%\Tablet\Wacom\Logs\WacomTouch.xml.txt because the regular user can no longer create the %ProgramFiles%\Tablet\Wacom\Logs mount point since he doesn't have write access on the %ProgramFiles%\Tablet\Wacom folder.WTabletServicePro.exe to impersonate the current user while copying %AppData%\WTablet\WacomTouch.xml to C:\Wacom\Logs\WacomTouch.xml.txt.WTabletServicePro.exe will be redirected to the %ProgramFiles%\Tablet\Wacom folder, and will try to copy the malicious FTD2XX.dll into it, it will fail because, impersonating the user, it won't have the necessary rights to write the malicious file.