Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLocate internet-exposed OmniRoute with login disabled
-
DeliveryPOST anonymous custom ACP agent to /api/acp/agents
-
ExploitSet binary=node with -e eval argument
-
ExecutionBypass binary-match self-consistency check
-
PersistexecFileSync runs interpreter payload
-
ImpactExecute arbitrary code in server container
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires the OmniRoute /api/acp/agents endpoint to be network-reachable AND one of: requireLogin=false (anonymous access accepted by isAuthRequired), or a fresh-instance bootstrap window before a management password is configured. The attacker must supply a 'versionCommand' whose binary matches an expected interpreter (node/python/ruby) but includes an evaluation argument such as '-e' or '-c'. Limiting factors: if requireLogin=true with a configured management password, exploitation instead requires a valid management session or management-scoped API key (no longer anonymous); the endpoint being spawn-capable but omitted from LOCAL_ONLY_API_PREFIXES/SPAWN_CAPABLE_PREFIXES is what removes the local-only guard. The CVSS AT:P reflects these configuration/timing prerequisites. |
| Impact | This is a genuine high-priority issue in the exposed configuration: the CVSS 4.0 base score is 9.5 with AV:N/AC:L/PR:N/UI:N and full VC/VI/VA plus subsequent-system impact, reflecting network-reachable, unauthenticated code execution. The AT:P (attack requirement present) metric is the honest qualifier - exploitation depends on requireLogin=false or hitting the fresh-instance bootstrap window before a management password is set; with requireLogin=true and a configured management password, an attacker instead needs a management session or management-scoped API key, which sharply reduces exposure. No EPSS score, KEV listing, or standalone POC is provided, so there is no evidence of active exploitation and no public exploit identified at time of analysis; however, the vendor advisory (GHSA-hf57-cqmx-p4gr) and a regression test in the fix PR describe the exact eval-payload PoC, so weaponization is straightforward. The signals are internally consistent (network RCE, conditional preconditions), so any operator running an internet-reachable instance with login disabled - or newly bootstrapped instances - should treat this as urgent and prioritize the config-level mitigation until a patched release ships. |
| Exploit ScenarioDerived | An attacker discovers an internet-exposed OmniRoute instance running with requireLogin=false (or catches one in its fresh-install bootstrap window) and sends an anonymous POST to /api/acp/agents registering a custom ACP agent whose binary and versionCommand both name 'node' with an argument of '-e <payload>'. The binary-match check passes, execFileSync runs node with the eval payload, and arbitrary code executes inside the server container; the advisory documents this exact PoC shape though no standalone exploit is published. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 10, 2026
Remote code execution in OmniRoute AI gateway 3.8.49 and earlier lets attackers run arbitrary commands in the server container via the POST /api/acp/agents custom ACP agent endpoint. The endpoint accepts attacker-controlled 'binary' and 'versionCommand' values and passes them to execFileSync after only a self-consistency (binary-match) check, so a matching interpreter carrying an eval-style argument (e.g. node -e, python -c) executes as code without any shell metacharacter. Because api/acp/ is excluded from the authentication-required prefixes, exploitation is remote and anonymous whenever requireLogin=false or during the fresh-instance bootstrap window; no fixed version exists and no public exploit is identified, though the GitHub advisory documents the PoC shape.
RemediationAI
No vendor-released patched version is available as of this review; the upstream fix exists only as PR #11028 / commit 60829241 (an untrusted-probe argument allowlist), so track the OmniRoute repository for a tagged release incorporating it and upgrade as soon as one ships. In the interim, the most effective compensating control is to set requireLogin=true and configure a management password so /api/acp/ requires a management session or management-scoped API key - note this only closes the anonymous path and any component with a valid management credential can still reach the sink. Additionally, ensure no instance is left in the fresh-instance bootstrap window while network-reachable (complete initial setup on a trusted network before exposure), and restrict or block external access to the /api/acp/agents endpoint at a reverse proxy or firewall, accepting that this may break legitimate custom-ACP-agent registration. Refer to https://github.com/diegosouzapw/OmniRoute/security/advisories/GHSA-hf57-cqmx-p4gr for the authoritative guidance.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
OmniRoute (cpe:2.3:a:diegosouzapw:omniroute) is an open-source AI gateway that fronts multiple model providers behind one endpoint. The root cause is CWE-94 (Improper Control of Generation of Code): the ACP agent registry's resolveVersionProbe validated a version probe only by confirming the requested binary matched an expected interpreter, while tokenizeVersionCommand and the DISALLOWED_VERSION_COMMAND_CHARS filter blocked a limited set of shell metacharacters but permitted interpreter evaluation flags. Since execFileSync invokes the interpreter directly (no shell), the metacharacter filter is irrelevant - arguments like '-e'/'-c' turn the interpreter into a code executor. Compounding this, authorization was routed through isAuthenticated → isAuthRequired, which admits anonymous callers when requireLogin=false, and the /api/acp/ path was listed in neither LOCAL_ONLY_API_PREFIXES nor SPAWN_CAPABLE_PREFIXES, so a spawn-capable route received none of the local-only or auth guards. The fix (PR #11028) adds a SAFE_VERSION_PROBE_ARG allowlist that restricts untrusted probes to a bare binary or a single recognized version flag.
Know when Omniroute 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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
Network-reachable unauthenticated RCE in the vulnerable config (PR:N), but requireLogin=false or bootstrap-window precondition raises AC:H; container code exec escapes the app trust boundary (S:C) with full C/I/A impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
OmniRoute is an open-source AI gateway providing a single endpoint for multiple model providers. In 3.8.49 and earlier, the OmniRoute POST /api/acp/agents custom ACP agent endpoint accepted attacker-controlled binary and versionCommand values and used only a self-consistency check before execFileSync executed the selected interpreter and arguments. The same request called refreshAgentCache, and resolveVersionProbe accepted the matched command before the execFileSync sink ran it. The tokenizeVersionCommand function and DISALLOWED_VERSION_COMMAND_CHARS filter rejected a limited set of shell metacharacters but still allowed interpreter evaluation arguments. The isAuthenticated function relied on isAuthRequired, which accepted anonymous requests when requireLogin was false, while api/acp/ was absent from LOCAL_ONLY_API_PREFIXES and SPAWN_CAPABLE_PREFIXES. With requireLogin=false or during a fresh-instance bootstrap window, a remote anonymous request could supply an interpreter evaluation argument and execute arbitrary code in the server container. With requireLogin=true and a configured management password, exploitation instead required a management session or management-scoped API key. No fixed version is available as of this review.
Technical POC Analysis
CWE-94, Improper Control of Generation of Code.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 public PoC link from nuclei
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
OmniRoute AI gateway 3.8.49 and earlier contains a critical remote code execution vulnerability allowing unauthenticated attackers to execute arbitrary commands on affected servers. This directly enables attackers to compromise AI infrastructure, access sensitive data, and pivot to connected systems. Organizations running this product face immediate risk of total infrastructure compromise with no available vendor patch.
Restrict network access to /api/acp/ endpoints to trusted administrative networks only; enable requireLogin=true to enforce authentication; implement continuous monitoring and alerting on all POST requests to /api/acp/agents; consider disabling OmniRoute AI gateway entirely if not operationally critical until a vendor patch becomes available; segment the gateway from sensitive data systems to limit blast radius of compromise.
Threat Model
4 threats: Elevation of Privilege, Tampering, Information Disclosure and 1 more
4-step attack chain with trust boundaries and controls
Full threat model - attack chain, trust boundaries, controls per stage and evidence - is part of the Pro and Business plans.
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
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Missing authentication in OmniRoute 3.8.50 through 3.8.51 lets an unauthenticated remote caller POST to /api/sync/tokens
OmniRoute 3.8.0 through 3.8.51 lets a caller who already holds a manage- or admin-scoped API key, or an oma_ access toke
EUVD-2026-75705
GHSA-hf57-cqmx-p4gr
NVD
CVE.org
EPSS
Exploit-DB