Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain or compromise ROLE_USER credentials
-
DeliveryPOST crafted DATE_FORMAT payload to /rest/reports/{AssetManagementMaintExpired or AssetManagementMaintStrategy}
-
ExploitJasperReports substitutes raw parameter into PostgreSQL to_date()
-
ExecutionUNION-based injection executes with application DB privileges
-
PersistExtract SNMP strings and device credentials
-
ImpactPivot to monitored network infrastructure
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Parameterized queries, prepared statements
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Persistence The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a valid OpenNMS user account with at least ROLE_USER privileges - the lowest default role, commonly assigned to read-only staff and automated service accounts. The attacker must be able to reach the OpenNMS REST API endpoint POST /rest/reports/{id} over the network. The two vulnerable reports (AssetManagementMaintExpired and AssetManagementMaintStrategy) must be present on the instance, which they are in all default deployments. No non-default configuration, special feature flag, or elevated privilege beyond ROLE_USER is required. Exploitation is bounded by: (1) the requirement for a valid authenticated session (PR:L) - unauthenticated exploitation is not possible; (2) the read-only nature of the injected SQL - direct data modification via this path is not established; and (3) the vendor's stated deployment model of internal-network-only, which limits external exposure but does not protect against insiders or attackers who have already achieved a foothold. |
| Impact | The vendor-assigned CVSS 6.5 with vector AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N is a well-calibrated assessment of this vulnerability. Authentication as ROLE_USER is the single meaningful barrier - it is the lowest built-in role in OpenNMS, routinely assigned to read-only monitoring staff and service accounts. Attack complexity is genuinely low once authenticated: two specific default-enabled report IDs and the injectable parameter name are now publicly documented in the patch diff. The read-only nature of the injection (I:N/A:N) limits direct write-side damage, but C:H is fully justified because the OpenNMS database stores SNMP community strings and credentials for every device under management, yielding a network-wide credential cache from a single low-privilege SQL read. No EPSS data, no CISA KEV listing, and no standalone POC are present in the input data, so exploitation probability cannot be precisely quantified; however, the transparent patch diff effectively serves as a vulnerability blueprint. The vendor's deployment guidance that Meridian and Horizon should be on internal networks reduces external exposure but does not address the insider or pivot-attacker scenario, which is the realistic threat model here. |
| Exploit ScenarioDerived | An attacker holding a low-privilege ROLE_USER credential - for example, a compromised read-only monitoring account or a malicious insider - issues a POST request to /rest/reports/AssetManagementMaintExpired with a DATE_FORMAT value such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 10, 2026
SQL injection in the JasperReports reporting engine of OpenNMS Meridian and Horizon allows any authenticated ROLE_USER to execute arbitrary SQL against the OpenNMS PostgreSQL database by supplying a crafted DATE_FORMAT parameter to two default-enabled asset-management reports via the REST API. The database exposure includes SNMP community strings, provisioning credentials, and notification credentials for every monitored device - high-value intelligence enabling lateral movement across the managed network. No public exploit is identified at time of analysis, but the upstream patch diff on GitHub PR #8832 publicly names the vulnerable parameters and report IDs, substantially lowering the bar for exploit development.
RemediationAI
Upgrade to OpenNMS Meridian 2024.3.13 or 2025.0.10, or OpenNMS Horizon 36.0.4 or newer, per vendor guidance reflected in GitHub PR #8832 (https://github.com/OpenNMS/opennms/pull/8832). If immediate patching is blocked, the most precise compensating control is to restrict access to the reporting REST API endpoint (POST /rest/reports/{id}) via reverse-proxy ACL or firewall rules, which disables online report generation for ROLE_USER accounts but has no effect on other OpenNMS functions. Alternatively, revoke reporting permissions from ROLE_USER accounts that do not require them - noting this changes access control for all reports, not only the two vulnerable ones. Consistent with vendor deployment guidance, ensure the OpenNMS instance is not directly reachable from untrusted networks, which reduces the attacker pool to authenticated insiders and post-compromise pivots.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
OpenNMS uses JasperReports for built-in online report generation. JasperReports JRXML templates support two parameter substitution modes: the safe parameterized form $P{param} (which binds values via prepared statements) and the unsafe raw-literal form $P!{param} (which substitutes the user-supplied value directly into the query string before execution). The two vulnerable templates, AssetManagementMaintExpired.jrxml and AssetManagementMaintStrategy.jrxml, used $P!{DS_DATE_FORMAT} and $P!{DATE_FORMAT} to insert a user-controlled date format string as the second argument to PostgreSQL's to_date() function - creating a classic in-string SQL injection point. The fix in PR #8832 replaces every $P!{} occurrence with $P{} parameterized binding and also converts interval construction from a raw string-interpolated INTERVAL '$P!{DAYS} days' to the PostgreSQL function make_interval(days => $P{DAYS}), closing both injection surfaces. Affected CPEs are cpe:2.3:a:the_opennms_group:meridian:*:*:*:*:*:*:*:* and cpe:2.3:a:the_opennms_group:horizon:*:*:*:*:*:*:*:* across all pre-fix versions. CWE-89 (Improper Neutralization of Special Elements used in an SQL Command) is the correct root-cause classification.
Know when Meridian 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:N/A:N
REST API is network-accessible; ROLE_USER auth required (PR:L); injection is read-only (I:N/A:N); full database read including secrets justifies C:H.
Primary rating from Vendor (OpenNMS).
CVSS VectorVendor: OpenNMS
DescriptionCVE.org
A SQL injection vulnerability exists in the JasperReports-based reporting feature of multiple versions of OpenNMS Meridian and Horizon. A low-privileged authenticated user (ROLE_USER) can run the shipped, default-enabled online reports "Maintenance contracts expired" (AssetManagementMaintExpired) and "Maintenance contracts strategy" (AssetManagementMaintStrategy) via the reporting REST API (POST /rest/reports/{id}) and supply a DATE_FORMAT parameter that the report templates substitute literally, un-escaped, into their SQL queries. This lets an attacker execute arbitrary SQL against the OpenNMS database and read arbitrary data, including database-stored secrets such as provisioning and notification credentials and SNMP community strings.
The solution is to upgrade to Meridian 2024.3.13, 2025.0.10 and Horizon 36.0.4 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.
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
SQL injection exploits the way applications construct database queries by mixing user input directly into SQL statements.
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
In OpenNMS Horizon, versions opennms-1-0-stable through opennms-27.1.0-1; OpenNMS Meridian, versions meridian-foundation
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
Unauthenticated authorization bypass in the OpenNMS Meridian and Horizon REST API lets any remote attacker who can reach
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
OpenNMS Meridian 2016, 2017, 2018 before 2018.1.25, 2019 before 2019.1.16, and 2020 before 2020.1.5, Horizon 1.2 through
In OpenNMS Horizon, versions opennms-1-0-stable through opennms-27.1.0-1; OpenNMS Meridian, versions meridian-foundation
EUVD-2026-75729
GHSA-fcjx-6cv6-5wqj
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB