{"id":"CVE-2026-102608","kind":"vulnerability","aliases":["CVE-2026-102608"],"related":[],"title":"ZoneMinder is a free, open source closed-circuit television software application","description":"ZoneMinder is a free, open source closed-circuit television software application. Prior to 1.38.3, downloadEvents() manually wraps a monitor Name value in single quotes instead of using escapeshellarg() before placing it in shell commands when a user with monitor-create or monitor-edit permission stores a monitor Name containing shell metacharacters and a user with Events View permission exports that monitor's events. In this attack mechanism, the stored monitor Name reaches both the ffmpeg concatenation command and the tar or zip archive command and breaks out of manual quoting. Arbitrary commands execute as the web server user. This issue is fixed in version 1.38.3.","summary":"ZoneMinder, an open source CCTV application, builds shell commands from a monitor Name using manual single quotes instead of escapeshellarg(). A user who can create or edit monitors can store a name with shell metacharacters, and a user who can view events can trigger it on export, running arbitrary commands as the web server user.","severity":"critical","cvss":9.0,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["linux","runtime","self-hosted","zoneminder"],"not_affected_if":["default-config"],"how_to_check":"Check the installed ZoneMinder version (unknown command; the sources do not say how to read it).\nReview monitor Names for shell metacharacters such as ' ; | $ ` (unknown query; the sources do not give one).","fix":"Upgrade ZoneMinder to version 1.38.3 or later.\nUntil then, restrict monitor-create and monitor-edit permissions to trusted users (unknown whether the sources offer another mitigation).","status":"open","published_at":"2026-10-16T20:17:17+00:00","first_seen_at":"2026-10-23T21:57:14+00:00","triaged_at":"2026-10-23T22:15:09+00:00","updated_at":"2026-10-23T22:28:55+00:00","category":"runtime","confidence":0.8,"triage":{"at":"2026-10-23T22:15:09Z","model":"claude-haiku-5-5","output":{"fix":"Upgrade ZoneMinder to version 1.38.3 or later.\nUntil then, restrict monitor-create and monitor-edit permissions to trusted users (unknown whether the sources offer another mitigation).","reach":"network","impact":"high","summary":"ZoneMinder, an open source CCTV application, builds shell commands from a monitor Name using manual single quotes instead of escapeshellarg(). A user who can create or edit monitors can store a name with shell metacharacters, and a user who can view events can trigger it on export, running arbitrary commands as the web server user.","category":"runtime","who_cares":["zoneminder","self-hosted","linux"],"confidence":0.8,"needs_auth":"yes","worst_case":"Attacker runs arbitrary commands as the web server user.","analyst_note":"","how_to_check":"Check the installed ZoneMinder version (unknown command; the sources do not say how to read it).\nReview monitor Names for shell metacharacters such as ' ; | $ ` (unknown query; the sources do not give one).\nunknown","needs_analyst":false,"not_affected_if":["default-config"],"user_interaction":"no","needs_special_setup":"no","severity_if_unknown":"critical"},"cost_usd":0.0005,"input_tokens":2882,"output_tokens":424,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-102608':15A,18A '-2026':14A,17A '1.38.3':94C,187C 'applic':12A,30B,91C 'arbitrari':73B,173C 'archiv':165C 'attack':148C 'break':168C 'build':31B 'cctv':29B 'circuit':9A,88C 'close':8A,87C 'closed-circuit':7A,86C 'command':33B,74B,114C,159C,166C,174C 'concaten':158C 'contain':131C 'creat':49B,121C 'cve':13A,16A 'downloadev':95C 'edit':51B,125C 'escapeshellarg':44B,108C 'event':66B,138C,145C 'execut':175C 'export':71B,141C 'ffmpeg':157C 'fix':184C 'free':4A,83C 'host':23B 'instead':42B,105C 'issu':182C 'linux':19B 'manual':39B,96C,171C 'mechan':149C 'metacharact':59B,133C 'monitor':36B,52B,99C,120C,124C,129C,143C,152C 'monitor-cr':119C 'monitor-edit':123C 'name':37B,56B,100C,130C,153C 'open':5A,27B,84C 'permiss':126C,140C 'place':110C 'prior':92C 'quot':41B,104C,172C 'reach':154C 'run':72B 'runtim':20B 'self':22B 'self-host':21B 'server':78B,179C 'shell':32B,58B,113C,132C 'singl':40B,103C 'softwar':11A,90C 'sourc':6A,28B,85C 'store':54B,127C,151C 'tar':162C 'televis':10A,89C 'trigger':68B 'use':38B,107C 'user':46B,62B,79B,117C,136C,180C 'valu':101C 'version':186C 'view':65B,139C 'web':77B,178C 'wrap':97C 'zip':164C 'zonemind':1A,24B,25B,80C","nicknames":[],"mitigations":[],"who_affected":null,"tier":null,"verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-16T20:17:17+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H","cvss_by":"security-advisories@github.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-102608","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-102608","severity":null,"published_at":"2026-10-16T20:17:17+00:00","modified_at":"2026-10-19T17:17:00+00:00","first_seen_at":"2026-10-23T21:57:14+00:00","fetched_at":"2026-10-23T22:28:55+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}