Severity by source
AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
REST API is network-accessible (AV:N), exploitation requires only a ROLE_REST account (PR:L) with no additional complexity, and impact is confined to alarm record integrity (I:L) with no confidentiality or availability effect.
Primary rating from Vendor (OpenNMS).
CVSS VectorVendor: OpenNMS
Lifecycle Timeline
2DescriptionCVE.org
An incorrect authorization check in the v2 Alarm REST API in OpenNMS Meridian and Horizon allows a low-privileged authenticated user (ROLE_REST) to acknowledge, escalate, or clear alarms recorded as an arbitrary username, and, when also assigned ROLE_READONLY, to modify alarm state despite the read-only restriction. A credential check that should restrict these operations is guarded by an inverted condition, so it never executes for a real (non-blank) username. This can potentially allow an attacker to compromise the integrity of alarm state and audit records.
The solution is to upgrade to Meridian 2024.3.12, 2025.0.9 and Horizon 36.0.3 or newer. Meridian and Horizon installation instructions state that they are intended for installation within an organization's private networks and should not be directly accessible from the Internet.
AnalysisAI
Incorrect authorization in OpenNMS Meridian and Horizon's v2 Alarm REST API allows any authenticated ROLE_REST user to acknowledge, escalate, or clear alarms attributed to arbitrary usernames, effectively forging audit records without holding delegation privileges. An inverted boolean condition in AlarmRestService.java - !StringUtils.isNotBlank(ackUser) instead of StringUtils.isNotBlank(ackUser) - renders the credential delegation check dead code for any non-blank username supplied in the request. Users simultaneously holding ROLE_REST and ROLE_READONLY can additionally bypass the read-only restriction to modify alarm state. No public exploit exists and the vulnerability is absent from CISA KEV; vendor-confirmed patches are available via OpenNMS GitHub PR #8755.
Technical ContextAI
OpenNMS Horizon and Meridian are Java-based network monitoring platforms sharing a common REST API layer. The vulnerable endpoint is the doUpdateProperties method in AlarmRestService.java, which handles HTTP PUT requests to the v2 alarms API for acknowledgement, escalation, and clear operations. The authorization guard was intended to prevent a user from submitting an ackUser parameter specifying a different username without holding delegation rights. Due to the logical negation error - the condition if (ackUser != null && !StringUtils.isNotBlank(ackUser)) evaluates to true only for blank strings, never for a real username - the enforcement block is entirely bypassed when an attacker supplies a non-blank arbitrary username. This is a textbook instance of CWE-863 (Incorrect Authorization): the check exists but is logically inverted, a logic flaw distinct from a missing control. CPE strings cpe:2.3:a:the_opennms_group:meridian:*:*:*:*:*:*:*:* and cpe:2.3:a:the_opennms_group:horizon:*:*:*:*:*:*:*:* confirm all versions of both products prior to the patched releases are affected.
RemediationAI
Upgrade OpenNMS Meridian to version 2024.3.12 or 2025.0.9 (whichever branch applies to the deployment), or upgrade OpenNMS Horizon to version 36.0.3 or newer, as confirmed by the vendor. The underlying fix - removing the logical negation from the StringUtils.isNotBlank() check in AlarmRestService.java - is a one-line change available in GitHub PR #8755 (https://github.com/OpenNMS/opennms/pull/8755); organizations capable of building from source can apply this immediately. As an interim workaround pending upgrade, audit and restrict ROLE_REST role assignments to only explicitly trusted service accounts, reducing the population of users able to exploit the flaw; be aware this does not eliminate risk for accounts that legitimately hold ROLE_REST. Additionally, enforce network-level access controls (firewall rules, VPN requirements) to ensure the OpenNMS REST API is not reachable from untrusted networks, consistent with the vendor's stated deployment guidance.
In OpenMNS Horizon 31.0.8 and versions earlier than 32.0.2 and related Meridian versions, any user that has the ROLE_FIL
The Horizon REST API includes a users endpoint in OpenMNS Horizon 31.0.8 and versions earlier than 32.0.2 on multiple pl
In OpenNMS Horizon, versions opennms-1-0-stable through opennms-27.1.0-1; OpenNMS Meridian, versions meridian-foundation
Session fixation vulnerability in OpenStack Dashboard (Horizon) folsom-1 and 2012.1 allows remote attackers to hijack we
Open redirect vulnerability in views/auth_forms.py in OpenStack Dashboard (Horizon) Essex (2012.1) allows remote attacke
An issue was discovered in OpenStack Horizon before 15.3.2, 16.x before 16.2.1, 17.x and 18.x before 18.3.3, 18.4.x, and
In OpenNMS Horizon, versions opennms-17.0.0-1 through opennms-27.1.0-1; OpenNMS Meridian, versions meridian-foundation-2
In OpenNMS Horizon, versions opennms-18.0.0-1 through opennms-27.1.0-1; OpenNMS Meridian, versions meridian-foundation-2
OpenStack Keystone before 2012.1.1, as used in OpenStack Folsom before Folsom-1 and OpenStack Essex, does not properly i
A BeanShell interpreter in remote server mode runs in OpenMNS Horizon versions earlier than 32.0.2 and in related Meridi
In OpenNMS Horizon, versions opennms-1-0-stable through opennms-27.1.0-1; OpenNMS Meridian, versions meridian-foundation
In OpenNMS Horizon, versions opennms-1-0-stable through opennms-27.1.0-1; OpenNMS Meridian, versions meridian-foundation
Same weakness CWE-863 – Incorrect Authorization
View allSame technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-57719
GHSA-r53w-fffc-9ppv