Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with monitor-edit permission
-
DeliverySave Local monitor with shell metacharacters in Device Path
-
ExploitTrigger monitor control/startup path
-
ExecutionDevice reaches Perl qx()/backtick before detainting
-
ImpactExecute arbitrary commands as web server user
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated ZoneMinder account holding monitor-create or monitor-edit permission (PR:L); the monitor Type must be 'Local'; the Device Path field must contain shell metacharacters; and the monitor control or startup path (zmc daemon control via zmdc.pl, or zmpkg.pl start/restart) must execute so the stored Device value is interpolated into Perl qx()/backtick execution before argument detainting. Limiting factors: it is not reachable pre-authentication, it does not affect network/IP camera monitors (only Local device monitors), and it is fixed in 1.39.2, 1.38.2, and 1.36.40, which reject any Device not matching a strict /dev/ path pattern. |
| Impact | This is a genuine high-priority issue rather than an inflated CVSS score. The provided CVSS:3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H = 8.8) is internally consistent with the description: a network-reachable web application where an already-authenticated low-privileged operator (PR:L) can achieve arbitrary OS command execution as the web server user with full C/I/A impact. The CWE-78 OS command injection is confirmed by the vendor security advisory (GHSA-g66m-77fq-79v9) and the fixing commit, which shows the unvalidated Device value flowing into Perl qx()/backtick execution before zmdc.pl argument detainting, while PHP paths relied only on bypassable escapeshellcmd. No EPSS score, CISA KEV listing, or public POC was provided in the input, so exploitation probability cannot be quantified. The dominant mitigating factor is that this is NOT unauthenticated - the attacker must already hold monitor-create or monitor-edit permission, which lowers mass-exploitation likelihood and makes this primarily a post-authentication RCE / privilege-escalation vector (e.g., a malicious or compromised operator account escalating to shell on the host) rather than a drive-by remote exploit. |
| Exploit ScenarioDerived | An attacker who holds a ZoneMinder account with monitor-create or monitor-edit permission creates or edits a monitor of Type 'Local' and sets its Device Path to a value containing shell metacharacters (e.g. a command-substitution or chained command). When the monitor control or startup path runs, the stored Device string is interpolated into a Perl qx()/backtick invocation of zmdc.pl before detainting, executing the injected command as the web server user. No public exploit code was identified in the provided data, but exploitation is straightforward given the low attack complexity and the attacker's full control of the injected field. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 16, 2026
OS command injection in ZoneMinder allows an authenticated user holding monitor-create or monitor-edit permission to execute arbitrary commands as the web server user by saving a Local-type monitor whose Device Path field contains shell metacharacters. The malicious stored Device value is later interpolated into shell commands in both Perl (qx()/backticks via zmdc.pl control paths and zmpkg.pl start/restart) and PHP (zmc daemon control helpers that relied on bypassable escapeshellcmd) when the monitor control or startup path runs. The issue is fixed in 1.39.2, 1.38.2, and 1.36.40, which reject any Device value not matching a strict /dev/ path pattern; no public exploit code has been identified at time of analysis, and exploitation is not confirmed actively exploited (KEV).
RemediationAI
Upgrade to a fixed release - ZoneMinder 1.39.2, 1.38.2, or 1.36.40 as applicable to your branch - which validates the monitor Device field against the strict pattern ^/dev/[\w/.\-]+$ and replaces escapeshellcmd with escapeshellarg in the Perl and PHP control paths; see the vendor advisory at https://github.com/ZoneMinder/zoneminder/security/advisories/GHSA-g66m-77fq-79v9 and the fixing commit at https://github.com/ZoneMinder/zoneminder/commit/419846c8750c3f45b9b8a1df8cd49c189a14dc03. If immediate patching is not possible, restrict the monitor-create and monitor-edit permissions to fully trusted administrators only, since the flaw requires an account with those privileges (PR:L, not pre-auth), which reduces the insider/compromised-account attack surface at the cost of slowing routine camera provisioning. Avoid creating or editing Local-type monitors that use raw device paths until patched, and audit existing monitor records for any Device value containing shell metacharacters such as ;, |, &, $, `, or newlines, since a previously poisoned record remains dangerous until the monitor control or startup path executes; deleting or correcting such records neutralizes the stored payload but is a data-integrity change that must be logged. Disabling zmc daemon control and startup automation removes the trigger path entirely but breaks automatic camera restart behavior and is not viable for production monitoring. No vendor-released patch is identified for versions older than these fixed releases, so back-porting the validation and escapeshellarg changes from commit 419846c is the fallback for unsupported branches.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is CWE-78, improper neutralization of special elements used in an OS command. ZoneMinder's monitor control subsystem builds command strings that are passed to Perl's qx() operator and backticks (scripts/ZoneMinder/lib/ZoneMinder/Monitor.pm control() and zmcControl, and scripts/zmpkg.pl.in start/restart), interpolating the user-supplied monitor Device field directly into 'zmdc.pl stop/start/restart zmc -d <Device>'. The stored value reaches those shell execution primitives before zmdc.pl argument detainting can neutralize metacharacters, so shell substitution occurs at the caller. Separate PHP control paths (web/includes/Monitor.php zmcControl, web/includes/functions.php daemonStatus/daemonCheck, web/api/app/Model/Monitor.php daemonControl, web/api/app/Controller/MonitorsController.php daemonStatus) applied escapeshellcmd, which is bypassable for this construction and is replaced in the fix with escapeshellarg. The patch adds a strict validation regex ^/dev/[\w/.\-]+$ on the Device field in the Perl Monitor.pm control and zmcControl routines, zmpkg.pl, the PHP Monitor model's validPath rule, and a new validDevicePath() helper in web/includes/functions.php used by web/includes/actions/monitor.php, rejecting non-conforming device paths outright. Affected CPE is cpe:2.3:a:zoneminder:zoneminder:*:*:*:*:*:*:*:*, i.e. essentially all releases prior to the fixed versions.
Know when Zoneminder gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Exploitable over the web (AV:N) at low complexity, but requires an authenticated operator with monitor edit/create rights (PR:L, no UI), yielding full command execution as the web user (C/I/A:H).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
ZoneMinder is a free, open source closed-circuit television software application. Prior to 1.39.2, 1.38.2, and 1.36.40, ZoneMinder interpolates an unvalidated monitor Device field into shell commands in PHP and Perl control paths when an authenticated user with monitor-create or monitor-edit permission saves a Local monitor whose Device Path contains shell metacharacters and the monitor control or startup path runs. In this attack mechanism, the stored Device value reaches Perl qx() and backtick execution before zmdc.pl argument detainting, while separate PHP command paths use bypassable escapeshellcmd defenses. The attacker can execute arbitrary commands as the web server user. This vulnerability is fixed in 1.39.2, 1.38.2, and 1.36.40.
Technical POC Analysis
CWE-78 (OS command injection).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
ZoneMinder, an open-source video surveillance platform, can be manipulated through its monitor configuration interface to execute operating-system commands on the server hosting the camera management stack. The advisory states the abuse requires an account already holding monitor-create or monitor-edit rights, and the malicious value is stored in the monitor record and later executed during routine startup or control operations, meaning a single saved configuration persists until it is removed. Leadership should care because compromise of that host places camera feeds, recorded footage, and any credentials or network paths reachable from the surveillance server under attacker control, and no vendor-released patch was identified at time of analysis.
No vendor-released patch identified at time of analysis. Interim mitigations: restrict monitor-create and monitor-edit permissions to a minimal trusted administrator set; audit and sanitize Local-type monitor Device Path values so they match a strict /dev/ path pattern; run the ZoneMinder web server and daemons under a least-privilege account separated from other services; segment the surveillance host from corporate networks and limit outbound traffic; apply host-based detection and file-integrity monitoring for unexpected command execution by the web server user; and log and alert on executions of zmdc.pl, zmpkg.pl, and zmc control helpers.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
More in Zoneminder
View allincludes/functions.php in ZoneMinder Video Server 1.24.0, 1.25.0, and earlier allows remote attackers to execute arbitra
ZoneMinder is a free, open source Closed-circuit television software application for Linux which supports IP, USB and An
ZoneMinder before 1.36.13 allows remote code execution via an invalid language. Rated critical severity (CVSS 9.8), this
Multiple directory traversal vulnerabilities in ZoneMinder 1.24.x before 1.24.4 allow remote attackers to read arbitrary
Information disclosure and authentication bypass vulnerability exists in the Apache HTTP Server configuration bundled wi
Command injection in ZoneMinder v1.36.34 video surveillance system via web/views/image.php. Unsanitized user input enabl
SQL injection vulnerability in Zoneminder 1.30 and earlier allows remote attackers to execute arbitrary SQL commands via
ZoneMinder is a free, open source closed-circuit television software application. Rated critical severity (CVSS 9.8), th
ZoneMinder is a free, open source Closed-circuit television software application for Linux which supports IP, USB and An
ZoneMinder before 1.32.3 has SQL Injection via the ajax/status.php filter[Query][terms][0][cnj] parameter. Rated critica
ZoneMinder before 1.32.3 has SQL Injection via the skins/classic/views/control.php groupSql parameter, as demonstrated b
daemonControl in includes/functions.php in ZoneMinder before 1.32.3 allows command injection via shell metacharacters. R
EUVD-2026-103154
NVD
CVE.org
Vulnrichment
GitHub
Exploit-DB