Skip to main content

ZoneMinder CVE-2026-30971

| EUVDEUVD-2026-103154 HIGH
OS Command Injection (CWE-78)
2026-10-16 GitHub_M
8.8
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate with monitor-edit permission
  2. Delivery
    Save Local monitor with shell metacharacters in Device Path
  3. Exploit
    Trigger monitor control/startup path
  4. Execution
    Device reaches Perl qx()/backtick before detainting
  5. Impact
    Execute 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.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

zoneminder 1.39.0, < 1.39.2
zoneminder < 1.36.40
zoneminder 1.38.0, < 1.38.2

Affected Packages

euvd zoneminder fix: 1.36.40, 1.38.2, 1.39.2

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

Vendor (GitHub_M) PRIMARY 8.8 HIGH
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 8.8 HIGH

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).

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Oct 16, 2026 - 21:03 EUVD
CVE Published
Oct 16, 2026 - 19:40 cve.org
HIGH 8.8

DescriptionCVE.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

Why It Matters

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.

Business Impact: High
Compensating Controls

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

Prevalence
Medium
popular open-source CCTV/NVR software, common in self-hosted surveillance deployments, not enterprise-ubiquitous
Social Media
2
Sightings
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

OS command injection occurs when an application passes unsanitized user input directly into system shell commands.

CVE-2013-0232 HIGH POC
7.5 Mar 20

includes/functions.php in ZoneMinder Video Server 1.24.0, 1.25.0, and earlier allows remote attackers to execute arbitra

CVE-2023-26035 CRITICAL POC
9.8 Feb 25

ZoneMinder is a free, open source Closed-circuit television software application for Linux which supports IP, USB and An

CVE-2022-29806 CRITICAL POC
9.8 Apr 26

ZoneMinder before 1.36.13 allows remote code execution via an invalid language. Rated critical severity (CVSS 9.8), this

CVE-2013-0332 MEDIUM POC
5.0 Mar 20

Multiple directory traversal vulnerabilities in ZoneMinder 1.24.x before 1.24.4 allow remote attackers to read arbitrary

CVE-2016-10140 HIGH
7.5 Jan 13

Information disclosure and authentication bypass vulnerability exists in the Apache HTTP Server configuration bundled wi

CVE-2025-65791 CRITICAL POC
9.8 Feb 18

Command injection in ZoneMinder v1.36.34 video surveillance system via web/views/image.php. Unsanitized user input enabl

CVE-2016-10204 CRITICAL POC
9.8 Mar 03

SQL injection vulnerability in Zoneminder 1.30 and earlier allows remote attackers to execute arbitrary SQL commands via

CVE-2024-43360 CRITICAL POC
9.8 Aug 12

ZoneMinder is a free, open source closed-circuit television software application. Rated critical severity (CVSS 9.8), th

CVE-2023-26036 CRITICAL POC
9.8 Feb 25

ZoneMinder is a free, open source Closed-circuit television software application for Linux which supports IP, USB and An

CVE-2019-8429 CRITICAL POC
9.8 Feb 18

ZoneMinder before 1.32.3 has SQL Injection via the ajax/status.php filter[Query][terms][0][cnj] parameter. Rated critica

CVE-2019-8428 CRITICAL POC
9.8 Feb 18

ZoneMinder before 1.32.3 has SQL Injection via the skins/classic/views/control.php groupSql parameter, as demonstrated b

CVE-2019-8427 CRITICAL POC
9.8 Feb 18

daemonControl in includes/functions.php in ZoneMinder before 1.32.3 allows command injection via shell metacharacters. R

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy