{"id":"CVE-2026-127236","kind":"vulnerability","aliases":["CVE-2026-127236"],"related":[],"title":"OpenNMS Meridian and Horizon: ad-hoc graph parameters let users inject rrdtool arguments","description":"An argument injection vulnerability exists in the ad-hoc RRD graph feature of multiple versions of OpenNMS Meridian and Horizon. The ad-hoc graph endpoint (GET /graph/graph.png?adhoc=true) copies request parameters into the rrdtool command line without validation. A low-privileged authenticated user (ROLE_USER or ROLE_DASHBOARD) can insert extra rrdtool arguments. An injected --daemon argument makes the server connect to an attacker-chosen address, which is a server-side request forgery. An injected DEF statement reads a local RRD file by absolute path. The command runs through exec with an argument array and no shell, so arbitrary operating system command execution is not possible. The fix validates the ad-hoc graph parameters against allowlists.\n\n\n\nThe solution is to upgrade to Meridian 2024.3.15, 2025.0.12, 2026.0.2 and Horizon 36.0.6 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.","summary":"The ad-hoc RRD graph endpoint in OpenNMS Meridian and Horizon copies request parameters into the rrdtool command line without validation. A logged-in low-privileged user can add rrdtool arguments to make the server connect to an address they choose (SSRF) or read local RRD files by absolute path, though not run operating system commands.","severity":"medium","cvss":5.4,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["horizon","meridian","opennms","package","self-hosted"],"not_affected_if":["not-internet-exposed","patched-version"],"how_to_check":"- Check the installed Meridian or Horizon version against the fixed versions listed below.\n- Look for the endpoint `GET /graph/graph.png?adhoc=true` in web server access logs for unusual parameters.","fix":"- Meridian `2024.3.15`, `2025.0.12`, `2026.0.2`\n- Horizon `36.0.6` or newer","status":"open","published_at":"2026-11-12T19:17:03+00:00","first_seen_at":"2026-11-12T19:40:14+00:00","triaged_at":"2026-11-12T19:41:01+00:00","updated_at":"2026-11-12T19:41:01+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-12T19:41:01Z","model":"claude-haiku-5-5","output":{"fix":"- Meridian `2024.3.15`, `2025.0.12`, `2026.0.2`\n- Horizon `36.0.6` or newer","reach":"network","title":"OpenNMS Meridian and Horizon: ad-hoc graph parameters let users inject rrdtool arguments","impact":"medium","summary":"The ad-hoc RRD graph endpoint in OpenNMS Meridian and Horizon copies request parameters into the rrdtool command line without validation. A logged-in low-privileged user can add rrdtool arguments to make the server connect to an address they choose (SSRF) or read local RRD files by absolute path, though not run operating system commands.","audience":"businesses","category":"package","nicknames":[],"who_cares":["opennms","meridian","horizon","self-hosted"],"confidence":0.7,"fix_status":"available","needs_auth":"yes","worst_case":"Attacker reaches internal hosts via SSRF and reads local RRD files","analyst_note":"","how_to_check":"- Check the installed Meridian or Horizon version against the fixed versions listed below.\n- Look for the endpoint `GET /graph/graph.png?adhoc=true` in web server access logs for unusual parameters.\n- unknown for other checks.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["patched-version","not-internet-exposed"],"who_is_affected":"Organizations running OpenNMS Meridian or Horizon versions with the ad-hoc graph feature. Exposure needs a valid account with ROLE_USER or ROLE_DASHBOARD. The vendor says these products are meant for private networks and should not be reachable from the internet, which limits exposure.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000792,"input_tokens":4826,"output_tokens":619,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-127236':17A,20A '-2026':16A,19A '/graph/graph.png':115C '2024.3.15':217C '2025.0.12':218C '2026.0.2':219C '36.0.6':222C 'absolut':79B,176C 'access':248C 'ad':6A,30B,95C,110C,204C 'ad-hoc':5A,29B,94C,109C,203C 'add':59B 'address':69B,157C 'adhoc':116C 'allowlist':209C 'arbitrari':191C 'argument':14A,61B,88C,143C,147C,185C 'array':186C 'attack':155C 'attacker-chosen':154C 'authent':132C 'choos':71B 'chosen':156C 'command':46B,86B,124C,179C,194C 'connect':66B,151C 'copi':40B,118C 'cve':15A,18A 'daemon':146C 'dashboard':138C 'def':168C 'direct':247C 'endpoint':34B,113C 'exec':182C 'execut':195C 'exist':91C 'extra':141C 'featur':99C 'file':77B,174C 'fix':200C 'forgeri':165C 'get':114C 'graph':8A,33B,98C,112C,206C 'hoc':7A,31B,96C,111C,205C 'horizon':4A,21B,39B,107C,221C,227C 'host':27B 'inject':12A,89C,145C,167C 'insert':140C 'instal':228C,236C 'instruct':229C 'intend':234C 'internet':251C 'let':10A 'line':47B,125C 'local':75B,172C 'log':52B 'logged-in':51B 'low':55B,130C 'low-privileg':54B,129C 'make':63B,148C 'meridian':2A,22B,37B,105C,216C,225C 'multipl':101C 'network':242C 'newer':224C 'opennm':1A,23B,36B,104C 'oper':84B,192C 'organ':239C 'packag':24B 'paramet':9A,42B,120C,207C 'path':80B,177C 'possibl':198C 'privat':241C 'privileg':56B,131C 'read':74B,170C 'request':41B,119C,164C 'role':134C,137C 'rrd':32B,76B,97C,173C 'rrdtool':13A,45B,60B,123C,142C 'run':83B,180C 'self':26B 'self-host':25B 'server':65B,150C,162C 'server-sid':161C 'shell':189C 'side':163C 'solut':211C 'ssrf':72B 'state':230C 'statement':169C 'system':85B,193C 'though':81B 'true':117C 'upgrad':214C 'user':11A,57B,133C,135C 'valid':49B,127C,201C 'version':102C 'vulner':90C 'within':237C 'without':48B,126C","nicknames":[],"mitigations":[],"who_affected":"Organizations running OpenNMS Meridian or Horizon versions with the ad-hoc graph feature. Exposure needs a valid account with ROLE_USER or ROLE_DASHBOARD. The vendor says these products are meant for private networks and should not be reachable from the internet, which limits exposure.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["horizon","medium","meridian","opennms","package","selfhosted"],"campaign_type":null,"search_a":"'-127236':17A,20A '-2026':16A,19A 'ad':6A 'ad-hoc':5A 'argument':14A 'cve':15A,18A 'graph':8A 'hoc':7A 'horizon':4A 'inject':12A 'let':10A 'meridian':2A 'opennm':1A 'paramet':9A 'rrdtool':13A 'user':11A","search_b":"'absolut':79B 'ad':30B 'ad-hoc':29B 'add':59B 'address':69B 'argument':61B 'choos':71B 'command':46B,86B 'connect':66B 'copi':40B 'endpoint':34B 'file':77B 'graph':33B 'hoc':31B 'horizon':21B,39B 'host':27B 'line':47B 'local':75B 'log':52B 'logged-in':51B 'low':55B 'low-privileg':54B 'make':63B 'meridian':22B,37B 'opennm':23B,36B 'oper':84B 'packag':24B 'paramet':42B 'path':80B 'privileg':56B 'read':74B 'request':41B 'rrd':32B,76B 'rrdtool':45B,60B 'run':83B 'self':26B 'self-host':25B 'server':65B 'ssrf':72B 'system':85B 'though':81B 'user':57B 'valid':49B 'without':48B","search_c":"'/graph/graph.png':115C '2024.3.15':217C '2025.0.12':218C '2026.0.2':219C '36.0.6':222C 'absolut':176C 'access':248C 'ad':95C,110C,204C 'ad-hoc':94C,109C,203C 'address':157C 'adhoc':116C 'allowlist':209C 'arbitrari':191C 'argument':88C,143C,147C,185C 'array':186C 'attack':155C 'attacker-chosen':154C 'authent':132C 'chosen':156C 'command':124C,179C,194C 'connect':151C 'copi':118C 'daemon':146C 'dashboard':138C 'def':168C 'direct':247C 'endpoint':113C 'exec':182C 'execut':195C 'exist':91C 'extra':141C 'featur':99C 'file':174C 'fix':200C 'forgeri':165C 'get':114C 'graph':98C,112C,206C 'hoc':96C,111C,205C 'horizon':107C,221C,227C 'inject':89C,145C,167C 'insert':140C 'instal':228C,236C 'instruct':229C 'intend':234C 'internet':251C 'line':125C 'local':172C 'low':130C 'low-privileg':129C 'make':148C 'meridian':105C,216C,225C 'multipl':101C 'network':242C 'newer':224C 'opennm':104C 'oper':192C 'organ':239C 'paramet':120C,207C 'path':177C 'possibl':198C 'privat':241C 'privileg':131C 'read':170C 'request':119C,164C 'role':134C,137C 'rrd':97C,173C 'rrdtool':123C,142C 'run':180C 'server':150C,162C 'server-sid':161C 'shell':189C 'side':163C 'solut':211C 'state':230C 'statement':169C 'system':193C 'true':117C 'upgrad':214C 'user':133C,135C 'valid':127C,201C 'version':102C 'vulner':90C 'within':237C 'without':126C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-12T19:17:03+00:00","kev":null,"cvss_vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N","cvss_by":"security@opennms.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-127236","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-127236","severity":null,"published_at":"2026-11-12T19:17:03+00:00","modified_at":"2026-11-12T19:17:03+00:00","first_seen_at":"2026-11-12T19:40:14+00:00","fetched_at":"2026-11-12T19:40:14+00:00","note":null}],"documents":[],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}