Issue: Local Privilege Escalation
CVE: CVE-2018-19999
Security researcher: Chris Moberly @ The Missing Link Security
Product name: Serv-U FTP Server
Product version: Tested on 15.1.6.25 (current as of Dec 2018)
Fixed in: 15.1.7
# Overview
The Serv-U FTP Server is vulnerable to authentication bypass leading to
privilege escalation in Windows operating environments due to broken access
controls. This can only be exploited by users who already have local access to
the Serv-U server.
By default, Serv-U runs in the context of 'SYSTEM' on Windows hosts. For
managing the environment, an executable is installed called "Serv-U". This
launches a dedicated UI when logged in to the machine via a graphical console.
What this application actually is, however, is a simple wrapper for
the HTTP interface. This can be confirmed by running Wireshark and listening
on the loopback interface. When the application first launches, a GET request
like the following can be observed:
```
GET /?Session=[REDACTED]&Language=en,US&LocalAdmin=1&Sync=68912515 HTTP/1.1
Host: 127.0.0.1:43958
Cookie: SULang=en%2CUS; domainname=test; domainid=; domainodbc=; 0UserGroupRadio=0
```
Note that the HTTP request above contains no logon credentials. This is met
with a reply like the following:
```
HTTP/1.0 200 OK
Server: Serv-U/15.1.6.25
Set-Cookie: Session=[REDACTED]; path=/; httponly;
Set-Cookie: CsrfToken=[REDACTED]; path=/; httponly;
Set-Cookie: SULang=en,US
```
The reply above can be seen to have a valid session token.
By default, low-privilege users cannot simply open the desktop application to
bypass a login prompt. However, while the management application is still
running, any user on the local machine can access the URL in the GET request
above and bypass authentication. In a default installation, this grants them
the highest level of access.
If an administrative user leaves the application running (either during active
use or something like a disconnected RDP session), this can be exploited.
Exploitation is possible by browsing to the following URL:
http://localhost/?Session=XXXXX&Language=en,US&LocalAdmin=1
The "Session" URL parameter must be brute-forced. This should be trivial.
Observed session IDs during limited tested were either 4 or 5 numerical digits.
Within this context, RCE (remote code execution) is a built-in feature. Simply
create an event on any user account with the details of the binary to run
and trigger the event manually as a test. This command will execute in the
context of the windows SYSTEM account, permitted a low privilege user to
take full control of the host operating system.
Sniffing the loopback interface on a target is NOT required, as this can be
done on a test machine under the attacker's control in order to enumerate the
vulnerability.
# Remediation
Serv-U administrators can do the following:
- Install the available hotfix from Serv-U.
- Set a password for the default Local Admin account. This must be done
manually, as it is not part of the installation options.
- Run the service as a lower-privileged account, which is not the default
installation option.