Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with View Events/Snapshots permission
-
DeliveryObtain valid CSRF token
-
ExploitSubmit export request with exportDetail enabled
-
ExecutionInject shell metacharacters via exportFile parameter
-
PersistCommand reaches exec() tar/zip directory argument
-
ImpactExecute arbitrary OS 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 | Exploitation requires an authenticated ZoneMinder session whose user holds the 'View Events' OR 'View Snapshots' permission, a valid CSRF token for the export request, and the 'exportDetail' option enabled on that request; the crafted payload must be placed in the exportFile request parameter handled by web/ajax/event.php and exportEvents() in web/skins/classic/includes/export_functions.php. Limiting factors: this is NOT unauthenticated (PR:L) - the attacker needs valid low-privilege credentials or an authenticated victim's session, the CSRF-token requirement blocks blind cross-site forgery without a leaked/valid token, and exportDetail must be enabled, so instances not exposing event export to lower-privilege roles are not exploitable by those roles. Affected only prior to version 1.38.3. |
| Impact | This is a genuine OS command injection (CWE-78) confirmed by the vendor's own GHSA advisory (GHSA-7j62-cjxp-3cj5) and the fix commits, where the attacker-controlled exportFile parameter is concatenated into a tar/zip command passed to exec(). The provided CVSS:3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, base 8.8) is internally consistent with the description: network-reachable web endpoint, low attacker complexity, and full C/I/A impact via arbitrary command execution as the web server user. The key limiting signal is PR:L - exploitation is NOT unauthenticated; it requires a valid session with 'View Events' or 'View Snapshots' permission plus a valid CSRF token and the exportDetail option enabled, which meaningfully narrows the attacker population to authenticated (possibly low-privilege) users or anyone who can ride an authenticated session. No EPSS score, KEV listing, or POC was provided in the input, so there is no evidence of active exploitation or public exploit code; the real-world risk is therefore 'high severity, authenticated-only, no current exploitation signal.' Treat it as a priority patch for internet-exposed ZoneMinder instances (where credential or session compromise is plausible) but not an emergency drop-everything issue absent any exploitation data. Note explicitly: EPSS is MISSING and KEV/POC status is UNKNOWN from the input, so the probability-of-exploitation dimension cannot be assessed. |
| Exploit ScenarioDerived | An authenticated ZoneMinder user holding only View Events or View Snapshots permission submits an event export request with exportDetail enabled and a crafted exportFile value containing shell metacharacters plus a valid CSRF token. The malicious string reaches the trailing directory argument of the tar/zip command run by exec(), executing arbitrary OS commands as the web server user. No public exploit code was identified in the provided data, but the single-parameter injection and low complexity make weaponization straightforward for anyone with a valid low-privilege account. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 16, 2026
Authenticated OS command injection in ZoneMinder versions prior to 1.38.3 allows a low-privilege user holding View Events or View Snapshots permission to run arbitrary operating system commands as the web server user. The flaw lives in exportEvents() in web/skins/classic/includes/export_functions.php, where the attacker-controlled exportFile request parameter is appended to a tar or zip command executed via exec() without shell escaping, so a crafted value can break out of the trailing directory argument. Exploitation requires a valid session (CVSS PR:L), a valid CSRF token for the export request, and the exportDetail option enabled; no public exploit code has been identified at time of analysis, and there is no confirmed active exploitation (CISA KEV), though the vendor's own GHSA advisory and fix commits confirm the issue is real and the EPSS-style risk is elevated by the low privilege threshold and high confidentiality, integrity, and availability impact (CVSS 8.8).
RemediationAI
Vendor-released patch: upgrade ZoneMinder to 1.38.3, which sanitizes export_root and connkey with preg_replace and wraps the composed export path in escapeshellarg() before it reaches exec(); the release is at https://github.com/ZoneMinder/zoneminder/releases/tag/1.38.3 and the advisory with details is at https://github.com/ZoneMinder/zoneminder/security/advisories/GHSA-7j62-cjxp-3cj5, with the underlying changes in commits 548ed87d47a49c17b4c842f6fee8a08660deb427 and 605f962b7b6ba7f5780b3e6715b5418b8b2addca. If immediate upgrade is not possible, apply compensating controls in combination: remove or restrict the View Events and View Snapshots permissions from untrusted and low-privilege accounts so they cannot reach the export endpoint at all (this is effective but may break legitimate operator workflows), ensure the exportDetail option is not enabled for roles that should not be exporting detail (side effect: exports lack per-event detail and downstream review is degraded), and restrict or block access to web/ajax/event.php at the reverse proxy for any client IP ranges that do not need to export events (side effect: legitimate remote administration from those ranges is blocked, so scope the rule narrowly). Because exploitation still requires a valid session, reduce the window further by enforcing short session lifetimes, rotating credentials, and invalidating sessions after privilege changes; note that CSRF tokens are a defense-in-depth layer here rather than the primary control, since the attacker is assumed to hold an authenticated session and a valid token. Monitor web server and ZoneMinder logs for export requests from web/ajax/event.php containing shell metacharacters such as semicolons, pipes, backticks, $(), or ampersands in the exportFile parameter, and alert on child processes spawned by the web server user running tar, zip, or unexpected shells.
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), a classic shell-injection pattern in PHP. ZoneMinder's event-export workflow accepts an exportFile parameter through web/ajax/event.php, which is passed into exportEvents() in web/skins/classic/includes/export_functions.php. There, the value is string-concatenated into a tar or zip command line and handed to PHP's exec(), which invokes a shell; because the parameter becomes the trailing directory argument without neutralization, shell metacharacters in the value are interpreted by the shell rather than treated as literal characters. The vendor fix (commits 548ed87d47a49c17b4c842f6fee8a08660deb427 and 605f962b7b6ba7f5780b3e6715b5418b8b2addca) does two things: it strips characters outside [\w\-.] from export_root and connkey via preg_replace with a zmExport fallback, and it wraps the composed export path in escapeshellarg() before appending it to $command, which is the correct primary defense for shell argument construction. The affected CPE is cpe:2.3:a:zoneminder:zoneminder:*:*:*:*:*:*:*:* covering all releases before 1.38.3. This is a PHP web-application component, so reachability depends on the export endpoint being exposed and the caller satisfying both the permission check and the CSRF-token check, which is why the CVSS vector is PR:L rather than PR:N.
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
Network-facing web endpoint reachable with any View Events/Snapshots account gives AV:N/PR:L; a held session supplies the CSRF token so AC:L, and command execution yields full C:H/I:H/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.38.3, the exportEvents() function concatenates the attacker-controlled exportFile request parameter into a shell command without neutralizing shell metacharacters when an authenticated user with View Events or View Snapshots permission submits an event export request with a crafted exportFile value, a valid CSRF token, and exportDetail enabled. The affected components are exportEvents(), exportFile, web/ajax/event.php, web/skins/classic/includes/export_functions.php. In this attack mechanism, the crafted exportFile value reaches the trailing directory argument of a tar or zip command executed by exec(). The attacker can execute arbitrary operating system commands as the web server user. This issue is fixed in version 1.38.3.
Technical POC Analysis
CWE-78 (OS command injection) in ZoneMinder's event export path.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
ZoneMinder video-surveillance servers running versions older than 1.38.3 contain an authenticated OS command-injection flaw (CVE-2026-102607, CVSS 8.8) that allows any account holding only View Events or View Snapshots rights to execute arbitrary commands as the web server user. Because the required privilege level is minimal, any shared or contractor viewing account becomes a viable path to full compromise of a system that holds live camera feeds, recording archives, and credentials. Leadership should treat this as a high-priority exposure for physical-security and operations teams, since compromise of surveillance infrastructure can undermine both evidence integrity and site security.
No vendor-released patch identified at time of analysis; interim mitigations: disable the exportDetail option, restrict View Events and View Snapshots permissions to vetted accounts only, block shell metacharacters in the exportFile request parameter via reverse proxy or WAF, restrict web-interface access to trusted network segments, and monitor export endpoint logs for injection attempts.
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.
Cross-Site Request Forgery exploits the automatic credential inclusion behavior of web browsers.
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-103146
NVD
CVE.org
GitHub
Exploit-DB