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 (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  
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/  
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:  
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  
# 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.