Hi @ll,
Intel Processor Identification Utility - Windows* Version,
version 6.0.0211 from 2019-02-11, available from
<https://downloadmirror.intel.com/28539/a08/Intel(R)%20Processor%20Identification%20Utility.exe>
via <https://downloadcenter.intel.com/download/28539>, and
earlier versions 6.0.* are vulnerable: in default installations
of all supported versions of Windows (really: Windows Vista and
later), they allows arbitrary code execution WITH escalation of
privilege via two INDEPENDENT attack vectors; additionally they
suffer from a denial of service.
CVSS:3.0/AV:L/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
CVSS 3 Score: 8.2 (High)
Vulnerability #1:
=================
Arbitrary code execution with escalation of privilege
Reason:
~~~~~~~
Use of ShellExecute() to run a batch script, i.e. use of file
association .bat: ShellExecute() reads the registry key
HKEY_CLASSES_ROOT to determine
1. the file type associated with any given file extension
(here: .bat), and
2. the command line associated with the file type (here:
batfile).
HKEY_CLASSES_ROOT is a virtual registry key, built from the
overlay of HKEY_LOCAL_MACHINE\SOFTWARE\Classes with
HKEY_CURRENT_USER\Software\Classes, i.e. the latter taking
precedence over the former.
HKEY_CURRENT_USER is under full control of the unprivileged
user who can hijack both the association of batfile to .bat
and the command lines associated with the verbs registered
for batfile.
Fix:
~~~~
Don't use ShellExecute() when running elevated, use
CreateProcess("C:\\Windows\\System32\\cmd.exe", "cmd.exe /C Call path\\filename.bat", ...)
instead!
Demonstration/Proof of concept:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Log on with the user account created during Windows setup;
2. Download
<https://skanthak.homepage.t-online.de/download/SENTINEL.EXE>
and save it in an arbitrary directory;
3. Open a command prompt in the directory where you saved
SENTINEL.EXE and run the following command line:
REG.EXE ADD "HKEY_CURRENT_USER\Software\Classes\batfile\Shell\Open\Command" /VE /T REG_SZ /D "%CD%\SENTINEL.EXE" /F
4. Download
<https://downloadmirror.intel.com/28539/a08/Intel(R)%20Processor%20Identification%20Utility.exe>
and save it in an arbitrary directory;
5. Execute the just downloaded installation program
"Intel(R) Processor Identification Utility.exe"
and answer the prompts: upon completion, notice the
message box titled "Vulnerability and Exploit Detector",
displayed by SENTINEL.EXE running elevated!
Vulnerability #2:
=================
Arbitrary code execution with escalation of privilege
Reason:
~~~~~~~
UNSAFE %TEMP% directory used for 77+ files extracted from
both the executable installation program
"Intel(R) Processor Identification Utility.exe" and the
extracted MSI installer %TEMP%\AIE*.tmp, plus unqualified
filename ATTRIB used in the script %TEMP%\EXE*.tmp.bat
See <https://cwe.mitre.org/data/definitions/377.html>,
<https://cwe.mitre.org/data/definitions/378.html> and
<https://cwe.mitre.org/data/definitions/379.html>, plus
<https://cwe.mitre.org/data/definitions/426.html> and
<https://cwe.mitre.org/data/definitions/427.html>
1. In the user account created during Windows setup, any
process running unprivileged has FULL access to %TEMP%.
2. The command processor searches executables in the CWD
(which happens to be %TEMP% here) first.
Fix:
~~~~
1. Create all extracted and temporary files with proper
permissions, i.e. writable/accessible only for
administrators, or in a directory where only
administrators can write/modify!.
2. Use fully qualified pathnames: ATTRIB is always
"%SystemRoot%\System32\attrib.exe"
Mitigations:
~~~~~~~~~~~~
1. Set the environment variable
NoDefaultCurrentDirectoryInExePath
to an arbitrary value: this excludes . from the search
path of the command processor (see
<https://msdn.microsoft.com/en-us/library/ms684269.aspx>).
2. Add the NTFS access control entry (D;OIIO;WP;;;WD) meaning
"deny execution of files for everyone, inheritable to files
in all subdirectories" to all TEMP directories.
JFTR: every batch script or program which fails after applying
of one of these changes is VULNERABLE and needs to be
fixed ANYWAY!
Demonstration/Proof of concept:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Log on with the user account created during Windows setup;
2. Download
<https://skanthak.homepage.t-online.de/download/SENTINEL.EXE>
and save it as ATTRIB.COM or ATTRIB.EXE in your %TEMP%
directory;
3. Download
<https://downloadmirror.intel.com/28539/a08/Intel(R)%20Processor%20Identification%20Utility.exe>
and save it in an arbitrary directory;
4. Execute the just downloaded installation program
"Intel(R) Processor Identification Utility.exe"
and answer the prompts: upon completion, notice the
message boxes titled "Vulnerability and Exploit Detector",
displayed by %TEMP%\ATTRIB.COM or %TEMP%\ATTRIB.EXE
running elevated!
Alternate attack:
~~~~~~~~~~~~~~~~~
Any of the 77+ files extracted into %TEMP% can be modified by
the unprivileged user between creation and use, for example
with a simple batch script as shown below, which is started
any time before the executable installer:
--- intel.cmd ---
@echo off
:WAIT
if not exist "%TEMP%\AI_EXTUI_BIN_*" goto :WAIT
for /D %%? in ("%TEMP%\AI_EXTUI_BIN_*") do set FOOBAR=%%?
rem now replace for example "%FOOBAR%\viewer.exe" with
rem an arbitrary executable
--- EOF ---
As soon as one of these files is executed during installation,
the attacker gains administrative privileges.
Vulnerability #3:
=================
Denial of service
Reason: see vulnerability #1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fix: see vulnerability #1
~~~~~~~~~~~~~~~~~~~~~~~~~
Demonstration/Proof of concept:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Log on with the user account created during Windows setup;
2. Add the NTFS access control entry (D;OIIO;WP;;;WD) meaning
"deny execution of files for everyone, inheritable to files
in all subdirectories" to your %TEMP% directory;
3. Download
<https://downloadmirror.intel.com/28539/a08/Intel(R)%20Processor%20Identification%20Utility.exe>
and save it in an arbitrary directory;
4. Execute the just downloaded installation program
"Intel(R) Processor Identification Utility.exe":
notice the error messages displayed from Windows
Installer due to non-executable DLLs written in
the %TEMP% directory!
Timeline:
=========
2019-07-17 first vulnerability report sent to vendor
2019-07-18 Intel's PSIRT opens case #2208018370
2019-07-28 Intel's PSIRT confirms reported vulnerability
2019-08-01 second vulnerability report sent to vendor
stay tuned, and FAR away from executable installers!
Stefan Kanthak
PS: wrapping an MSI installer in an executable self-extractor
is COMPLETE nonsense!