CVE-2026-104198 in ZoneMinderinfo

Summary

by MITRE • 10/15/2026

ZoneMinder is a free, open source closed-circuit television software application. In versions 1.34.0 through 1.36.38, the web interface mishandles failed token authentication in web/includes/auth.php. validateToken() returns false when a token is malformed or has an invalid signature, but the caller assigns that value to the global $user variable; because web/index.php tests isset($user), boolean false is treated as a present user and the normal login redirect is skipped. This can dispatch views that rely on the outer authentication gate, including the zones view, which accepts an attacker-selected monitor ID and discloses monitor and zone metadata without an independent permission check. Permission helpers receive the false user value and deny privileged operations, so unauthorized state changes have not been established. This vulnerability is fixed in version 1.36.63, where conversion to ZM\User objects causes invalid token state to fail before view dispatch. Later defense-in-depth changes explicitly leave $user unset after failed token validation and reject non-ZM\User values at the web authentication gate.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 10/15/2026

ZoneMinder is a widely deployed open-source closed-circuit television software application used for video surveillance and monitoring. In versions ranging from 1.34.0 through 1.36.38, a critical logic flaw exists within the web interface's authentication mechanism, specifically located in the file web/includes/auth.php. The vulnerability stems from an improper handling of failed token authentication during session validation. When the validateToken function encounters a malformed token or one with an invalid signature, it correctly returns false to indicate failure. However, this boolean value is subsequently assigned directly to the global $user variable rather than being handled as a null or unset state. This design choice creates a significant discrepancy between the actual authentication status and the internal representation of user identity within the application's runtime environment.

The core technical flaw manifests when web/index.php evaluates the presence of a valid session using an isset check on the $user variable. Because boolean false is considered a set value in PHP, the condition passes, leading the application to bypass the standard login redirect that would normally enforce authentication requirements. Consequently, the system proceeds as if a user is authenticated and present, even though no valid credentials were provided or verified. This logic error effectively creates an unauthenticated access path for specific parts of the web interface that rely on this outer authentication gate rather than performing independent permission checks at every step.

The operational impact of this vulnerability allows attackers to dispatch views that are intended to be protected by user authentication, most notably the zones view. This component accepts a monitor ID parameter selected by the attacker and proceeds to disclose sensitive metadata regarding monitors and their associated zones without requiring valid credentials or verifying specific permissions for those resources. The disclosure includes configuration details and structural information about the surveillance setup, which can aid in further reconnaissance or targeted attacks against the physical security infrastructure managed by ZoneMinder. This behavior aligns with CWE-287, Improper Authentication, as well as CWE-862, Missing Authorization Check, since the application fails to ensure that only authorized users can access specific resource views.

Despite this significant information disclosure risk, it is important to note that unauthorized state changes have not been established through this vector alone. Permission helper functions within ZoneMinder receive the false user value resulting from the failed token validation and correctly deny any privileged operations such as modifying settings or controlling cameras. This means that while an attacker can read sensitive configuration data, they cannot alter system states or perform administrative actions via this specific flaw. The vulnerability is primarily classified under ATT&CK technique T1087, Account Discovery, due to the ability to enumerate and view monitor configurations without authentication, potentially facilitating lateral movement if other services are exposed based on discovered network topology.

The issue was addressed in version 1.36.63 through a comprehensive overhaul of the user object handling logic. The fix ensures that invalid token states result in the explicit rejection before any views are dispatched to the client. Furthermore, later defense-in-depth changes were implemented to explicitly leave the $user variable unset after failed token validation, ensuring that subsequent checks correctly identify the absence of an authenticated session. Additionally, the web authentication gate was updated to reject non-ZM\User values, preventing boolean false or other invalid types from masquerading as valid user objects. These measures restore strict adherence to secure coding practices by separating authentication failure states from successful login states and enforcing type safety in identity management.

To mitigate this vulnerability in affected systems, administrators should immediately upgrade ZoneMinder to version 1.36.63 or later where the logic error is resolved. For organizations unable to patch immediately due to operational constraints, implementing a web application firewall rule that blocks requests attempting to access zone-related endpoints without valid session cookies can provide temporary protection. It is also recommended to review network segmentation policies to ensure that ZoneMinder interfaces are not exposed directly to untrusted networks and to monitor logs for unusual patterns of metadata enumeration attempts indicative of exploitation activity related to CWE-200, Information Exposure.

Responsible

GitHub M

Reservation

10/01/2026

Disclosure

10/15/2026

Moderation

accepted

EPSS

0.00386

KEV

no

Activities

low

Sources

Do you want to use VulDB in your project?

Use the official API to access entries easily!