Headline
CVE-2023-26036: Local File Inclusion vulnerability
ZoneMinder is a free, open source Closed-circuit television software application for Linux which supports IP, USB and Analog cameras. Versions prior to 1.36.33 and 1.37.33 contain a Local File Inclusion (Untrusted Search Path) vulnerability via /web/index.php. By controlling $view, any local file ending in .php can be executed. This is supposed to be mitigated by calling detaintPath, however dentaintPath does not properly sandbox the path. This can be exploited by constructing paths like "…/./", which get replaced by "…/". This issue is patched in versions 1.36.33 and 1.37.33.
Impact
Local File Inclusion vulnerability, all ZoneMinder installs < 1.36.33 are impacted
- In /web/index.php, there is a Local File Inclusion vulnerability:
if ( $action and $view and !$request ) {
if ( file_exists(‘includes/actions/’.$view.’.php’) ) {
require_once(‘includes/actions/’.$view.’.php’);
} else {
ZM\Warning(“No includes/actions/$view.php for action $action”);
}
}
By controlling $view, any local file ending in .php can be executed. This is supposed to be mitigated by calling detaintPath:
$view = isset($_REQUEST[‘view’]) ? detaintPath($_REQUEST[‘view’]) : null;
But dentaintPath is not properly sandboxing the path, but rather just replacing “…/” with “” once: (/web/includes/functions.php)
function detaintPath($path) {
// Remove any absolute paths, or relative ones that want to go up
$path = str_replace('…/’, '’, $path);
$path = ltrim($path, ‘/’);
return $path;
}
This can be exploited by constructing paths like "…/./", which get replaced by "…/".
Patches
Fixed by 3268f95.
All users should apply patch manually or upgrade to 1.36.33 or 1.37.33 or greater.
Workarounds
Apply the patch manually.
Further credits
SamXML
Manfred Paul