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.