ZoneMinder versions prior to 1.36.33 and 1.37.33 are vulnerable to OS command injection via the daemonControl() function in /web/api/app/Controller/HostController.php. Any authenticated user can craft an API command that results in arbitrary shell command execution as the web server user. The vulnerability is due to insufficient sanitization of user-supplied input passed to system-level command execution functions.
Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.
What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.
What an attacker gets, and what they’ve been doing with it.
If you can’t patch tonight, do this now.
Patch, then assume compromise.
1 valid exploit after Mallory filtered fakes, detection scripts, and README-only repos.
This repository is a small standalone Python proof-of-concept exploit for CVE-2023-26039 affecting ZoneMinder. It contains one executable script, CVE-2023-26039.py, and a README with setup and usage examples. The script uses the requests library and argparse for CLI handling. Exploit flow: first, it authenticates to the ZoneMinder API by POSTing credentials to /api/host/login.json and extracting an access_token from the JSON response. Second, it constructs a shell payload, base64-encodes it, and wraps it in a bash execution primitive to reduce quoting issues. Third, it sends a POST request to /api/host/daemonControl/{daemon}.pl/{cmd}.json with parameters token, command=start, and a malicious action value of the form logrotate&<cmd>&. The action parameter is the actual injection point used to achieve authenticated OS command execution. Capabilities: the exploit supports arbitrary command execution via the -c option and a built-in reverse shell mode via -lh/-lp, which generates a bash /dev/tcp reverse shell. The default daemon argument in code is zmdc.pl, and because the URL template appends .pl again, the resulting path may appear as zmdc.pl.pl in output/examples; despite that quirk, the intended target is the daemonControl API path. Repository structure is minimal and purpose-built: one Python exploit script and one documentation file. This is a real exploit, not a detector, and it is operational because it includes a usable payload path for both command execution and reverse shell access.
Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.
Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.
No public activity tracked yet. Mallory keeps watching.
No public activity observed for this vulnerability.
Query your assets running an affected version, and investigate the blast radius.
Every observed campaign linking this CVE to a named adversary.
Malware families riding this exploit, with evidence and IOCs.
YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.
Cross-references every affected SKU, including bundled OEM variants.
Community discussion across Reddit, Mastodon, and other social sources.