# XAMPP 7.1.1-0-VC14 DLL Hijacking Vulnerability


Hi @ll,

xampp-win32-7.1.1-0-VC14-installer.exe, available from
<https://www.apachefriends.org/download.html>, is vulnerable,
dangerous and defective.

ALL other executable installers built with BitRock InstallBuilder
(which of course includes BitRocks InstallBuilder itself) are
vulnerable and defective too.


0.a It instructs its unsuspecting users with a dialog box
| Warning                                                           [X]
|  ^  Important! Because an activated User Account Control (UAC)
| /!\ on your system some functions of XAMPP are possibly restricted.
| --- With UAC please avoid to install XAMPP to C:\Program Files
|     (missing write permissions). Or deactivate UAC with msconfig
|     after this setup.
|                             [ OK ]
    to circumvent a security boundary or a security feature.

0.b The second alternative assumes that users don't use (unprivileged)
    STANDARD user accounts, but the (protected) administrator account
    created during Windows setup.

    See but Microsoft's recommendations

| Do not disable UAC
| Use standard user accounts


1.a It loads (at least) SAMCli.dll, SchedCli.dll and LogonCli.dll
    (tested on Windows 7 SP1) from its "application directory"
    instead Windows' "system directory" %SystemRoot%\System32\,
    resulting in arbitrary code execution.

    For software downloaded with a web browser the "application
    directory" is typically the user's "Downloads" directory: see
    <http://seclists.org/fulldisclosure/2015/Nov/101> and
    <http://seclists.org/fulldisclosure/2015/Dec/86> plus
    <http://seclists.org/fulldisclosure/2012/Aug/134> and

    Also see <https://cwe.mitre.org/data/definitions/426.html>,
    <https://capec.mitre.org/data/definitions/471.html> and

1.b It creates 10 DLLs named BR<4tHexDigits>.tmp in the user's
    %TEMP% directory and loads them during the installation.

    An unprivileged attacker can modify these DLLs between their
    creation and loading, for example using the following (trivial)
    batch script, again resulting in arbitrary code execution:

    --- BITROCK.CMD ---
    If Not Exist "%TEMP%\BR????.DLL" Goto :WAIT
    For %%! In ("%TEMP%\BR????.DLL") Do Copy SENTINEL.DLL "%%!"
    --- EOF ---

    See <https://skanthak.homepage.t-online.de/sentinel.html> for

1.c Thanks to the embedded application manifest which specifies
    "requireAdministrator" the installer will be started with
    administrative privileges ("protected" administrators are
    prompted for consent, unprivileged standard users are prompted
    for an administrator password), resulting in an escalation of
    privilege if (one of) the DLLs named above get(s) executed!

    If (one of) the DLLs named above get(s) planted in the users
    "Downloads" directory, for example per "drive-by download",
    this vulnerability becomes a remote code execution WITH
    escalation of privilege.


2.a It has INVALID PE (section) headers; Microsoft's DUMPBIN.EXE
    aborts with "access violation" (see below) due to the INVALID
    section name "/4"!

    From the PE/COFF specification, available via

| Offset  Size  Field  Description
|      0     8  Name   An 8-byte, null-padded UTF-8 encoded string.
|                      If the string is exactly 8 characters long,
|                      there is no terminating null. For longer names,
|                      this field contains a slash (/) that is followed
|                      by an ASCII representation of a decimal number
|                      that is an offset into the string table.
|                      Executable images do not use a string table and do
|                      not support section names longer than 8 characters.
|                      Long names in object files are truncated if they
|                      are emitted to an executable file.

2.b The IMPORT directory contains 2 IMAGE_IMPORT_DESCRIPTOR entries
    for msvcrt.dll.

    It should but have only 1 IMAGE_IMPORT_DESCRIPTOR per DLL!
    See the PE/COFF specification:

| Import Directory Table
| The import directory table consists of an array of import directory
| entries, one entry for each DLL to which the image refers.


* Don't build executable installers, they are almost always vulnerable!

  Create native installation packages for the respective OS instead.
  For Windows these are .MSI or .INF with .CAB.

* Don't use executable installers!

* stay FAR away from so called products of companies like BitRock

stay tuned
Stefan Kanthak


2017-02-17    vulnerability report sent to one of the customers/users
              of BitRock, the maker of XAMPP and the equally vulnerable
              and defective BitRock InstallBuilder

2017-02-18    reply from this customer:
              "I have [therefore] escalated this report to Bitrock's
               support team."

              NO REPLY from Bitrock's support team.

2017-02-19    vulnerability report sent to the german tax office: their
              "Elster Formular" software was built with the vulnerable
              and defective BitRock InstallBuilder too

              NO REPLY, not even an acknowledgement of receipt from the
              german tax office

2017-02-26    vulnerability report sent to BitRock, maker of XAMPP,
              Bitnami and BitRock InstallBuilder

2017-02-27    reply from BitRock: some lame excuses, and
              "Thank you again for sharing all of the concerns with us."
              but no hint/ETA for a fix

2017-02-27    vulnerability report resent to german tax office

2017-03-03    reply from german tax office:
              "we've rebuilt our installers, the vulnerability is

2017-03-06    NO, it is NOT fixed, the installer still shows the
              reported defects/vulnerabilities

2017-03-23    reply from german tax office:
              "we are working on an .MSI installer; ETA April 18"

2017-04-26    german tax office published .MSI installers for their
              "Elster Formular" software

2017-05-04    report published


C:\>link.exe /dump /headers xampp-win32-7.1.1-0-VC14-installer.exe

Microsoft (R) COFF/PE Dumper Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

Dump of file xampp-win32-7.1.1-0-VC14-installer.exe

PE signature found


             14C machine (x86)
               B number of sections
        58071D79 time date stamp Wed Oct 19 09:15:05 2016
          2B5C00 file pointer to symbol table
               0 number of symbols
              E0 size of optional header
             32E characteristics
                   Line numbers stripped
                   Symbols stripped
                   Application can handle large (>2GB) addresses
                   32 bit word machine
                   Debug information stripped

             10B magic # (PE32)
            2.22 linker version
          1D2C00 size of code
          2B5800 size of initialized data
            1C00 size of uninitialized data
            12A0 entry point (004012A0)
            1000 base of code
          1D4000 base of data
          400000 image base (00400000 to 006BDFFF)
            1000 section alignment
             200 file alignment
            4.00 operating system version
            1.00 image version
            4.00 subsystem version
               0 Win32 version
          2BE000 size of image
             400 size of headers
         787749C checksum
               2 subsystem (Windows GUI)
             540 DLL characteristics
                   Dynamic base
                   NX compatible
                   No structured exception handler
          200000 size of stack reserve
            1000 size of stack commit
          100000 size of heap reserve
            1000 size of heap commit
               0 loader flags
              10 number of directories
          280000 [      6E] RVA [size] of Export Directory
          281000 [    3C04] RVA [size] of Import Directory
          287000 [   22B34] RVA [size] of Resource Directory
               0 [       0] RVA [size] of Exception Directory
         786BB58 [    10B0] RVA [size] of Certificates Directory
          2AA000 [   13850] RVA [size] of Base Relocation Directory
               0 [       0] RVA [size] of Debug Directory
               0 [       0] RVA [size] of Architecture Directory
               0 [       0] RVA [size] of Global Pointer Directory
          286000 [      18] RVA [size] of Thread Storage Directory
               0 [       0] RVA [size] of Load Configuration Directory
               0 [       0] RVA [size] of Bound Import Directory
          2819AC [     894] RVA [size] of Import Address Table Directory
               0 [       0] RVA [size] of Delay Import Directory
               0 [       0] RVA [size] of COM Descriptor Directory
               0 [       0] RVA [size] of Reserved Directory

   .text name
  1D2B94 virtual size
    1000 virtual address (00401000 to 005D3B93)
  1D2C00 size of raw data
     400 file pointer to raw data (00000400 to 001D2FFF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
60500060 flags
         Initialized Data
         Execute Read

   .data name
   1400C virtual size
  1D4000 virtual address (005D4000 to 005E800B)
   14200 size of raw data
  1D3000 file pointer to raw data (001D3000 to 001E71FF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
C0600040 flags
         Initialized Data
         Read Write

  .rdata name
   425C0 virtual size
  1E9000 virtual address (005E9000 to 0062B5BF)
   42600 size of raw data
  1E7200 file pointer to raw data (001E7200 to 002297FF)
       0 file pointer to relocation table
       0 file pointer to line numbers
       0 number of relocations
       0 number of line numbers
40600040 flags
         Initialized Data
         Read Only

LINK : fatal error LNK1000: Internal error during DumpSections

  Version 8.00.50727.762

  ExceptionCode            = C0000005
  ExceptionFlags           = 00000000
  ExceptionAddress         = 00427362 (00400000) "C:\Program Files\...\LINK.EXE"
  NumberParameters         = 00000002
  ExceptionInformation[ 0] = 00000000
  ExceptionInformation[ 1] = 00000004

  Eax    = 40000040  Esp    = 0012E510
  Ebx    = 0000014C  Ebp    = 00000000
  Ecx    = 00000007  Esi    = 00000004
  Edx    = 00000004  Edi    = 00403D00
  Eip    = 00427362  EFlags = 00010246
  SegCs  = 0000001B  SegDs  = 00000023
  SegSs  = 00000023  SegEs  = 00000023
  SegFs  = 0000003B  SegGs  = 00000000
  Dr0    = 00000000  Dr3    = 00000000
  Dr1    = 00000000  Dr6    = 00000000
  Dr2    = 00000000  Dr7    = 00000000


# Iranian Exploit DataBase = http://IeDb.Ir [2017-05-07]