Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessConnect to network segment hosting openNDS captive portal
-
DeliveryAuthenticate through captive portal login flow
-
ExploitCraft HTTP GET request with semicolon-injected shell command in query parameter key
-
Executionclient_params.sh passes unsanitized key to shell command
-
PersistExecute arbitrary OS commands as openNDS daemon (typically root)
-
ImpactFull router compromise
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires two concrete prerequisites: the attacker must have successfully authenticated to the openNDS captive portal (PR:L - a captive portal login is sufficient, no administrator or privileged account is needed), and must be on the same adjacent network segment as the captive portal interface (AV:A). The vulnerable code path is only triggered when the client_params.sh script is invoked to serve the authenticated client status page - meaning the feature must be active, which it is by default in a standard openNDS deployment. No additional non-default configuration is required. Exploitation is bounded by the adjacency requirement (internet-based attackers without network presence cannot directly reach the portal) and by the need to complete captive portal authentication before injecting commands. The injection point is specifically the query parameter key name, not the value, which may bypass naive input filters that only sanitize parameter values. |
| Impact | The CVSS 7.6 score with vector AV:A/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L accurately reflects the real-world risk profile. The adjacent-network vector (AV:A) confines the attacker pool to users already on the same broadcast domain as the captive portal interface, which meaningfully limits internet-scale exposure. PR:L requires successful captive portal authentication before exploitation, adding a second barrier. However, the technical impact is severe: openNDS typically runs as root on OpenWrt devices, so successful command injection yields full router compromise including confidentiality and integrity of all traffic passing through the device. No EPSS data was provided in the available intelligence, and no KEV listing or POC code has been identified - these are unknown rather than confirmed-absent. Even small-scale operators running openNDS-based hotspots for guest or public Wi-Fi should treat this as high priority, given that the captive portal's authenticated user base represents an already semi-trusted attacker population with reliable adjacent access. |
| Exploit ScenarioDerived | An attacker authenticates to the openNDS captive portal through normal means, then crafts an HTTP GET request to the client status page with a URL query parameter key containing a semicolon followed by an arbitrary shell command - for example, GET /status?legit;id=value. The client_params.sh script processes the parameter key without sanitization and passes it to a shell invocation, executing the injected command in the context of the openNDS daemon. Because openNDS typically runs as root on OpenWrt, this grants full device control. No public POC has been identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 28, 2026
OS command injection in openNDS before 11.0.0 allows an authenticated captive portal user to execute arbitrary shell commands on the host router by embedding semicolons in HTTP GET query parameter names sent to the client_params.sh script. The daemon-invoked script passes unsanitized parameter keys directly into shell commands, making the exploitation straightforward once an attacker has portal authentication. No public exploit or CISA KEV listing has been identified at time of analysis; an upstream fix is available targeting version 11.0.0.
RemediationAI
Upgrade openNDS to version 11.0.0 or later, which incorporates the fix from commit 294983e859bb678eef7db06fc9f6afab0b489d8e (https://github.com/openNDS/openNDS/commit/294983e859bb678eef7db06fc9f6afab0b489d8e) - this adds URL-encoding sanitization of all configuration parameters before shell interpolation, directly eliminating the injection vector. If an immediate upgrade is not feasible, consider disabling the authenticated client status page feature in openNDS configuration if it is not operationally required; this removes the vulnerable code path entirely but will affect the user-facing portal experience. As a secondary compensating control, restrict which network segments can reach the captive portal interface using firewall rules (e.g., iptables on OpenWrt), reducing the pool of attackers who satisfy the AV:A adjacency requirement. Note that authentication to the captive portal is itself a limiting factor - hardening or rate-limiting the portal authentication flow reduces the risk surface further.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
openNDS is an open-source captive portal daemon designed for OpenWrt and embedded Linux routers. The vulnerable component is client_params.sh, a shell script invoked by the openNDS daemon to render the authenticated client status page. CWE-78 (Improper Neutralization of Special Elements Used in an OS Command) describes the root cause: HTTP GET query parameter keys sourced from user-controlled input are interpolated into shell commands without sanitization, permitting metacharacter injection via semicolons. The CPE string cpe:2.3:a:opennds:opennds:*:*:*:*:*:*:*:* covers all versions prior to 11.0.0. The fix in commit 294983e introduces a urlencode() function and a get_option_from_config() wrapper that sanitizes values through sed and awk substitution before any shell interpolation occurs.
Know when Opennds 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:A/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L
Adjacent-only reach and captive portal authentication (PR:L) bound the attacker pool; shell injection on a root-running daemon yields high C/I; A:L reflects partial disruption rather than full denial.
Primary rating from Vendor (mitre).
CVSS VectorVendor: mitre
Lifecycle Timeline
2DescriptionCVE.org
In openNDS before 11.0.0, the client_params.sh script, invoked by the openNDS daemon to serve the authenticated client status page, is vulnerable to OS command injection through crafted HTTP GET query parameter keys. An authenticated captive portal user can inject arbitrary shell commands by embedding semicolons in a URL query parameter name.
Executive ViewAI
openNDS before version 11.0.0 contains an OS command injection vulnerability allowing authenticated captive portal users to execute arbitrary shell commands on router hosts. Organizations running openNDS for guest network access face potential compromise of network infrastructure and loss of captive portal security controls.
Apply vendor patch: upgrade to openNDS 11.0.0.
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
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
Related Vulnerabilities in openNDS Memory and Command Injection Flaws
View all 4An issue was discovered in the captive portal in OpenNDS before version 10.1.3. Rated critical severity (CVSS 9.8), this
An issue was discovered in OpenNDS Captive Portal before version 10.1.2. Rated critical severity (CVSS 9.8), this vulner
openNDS 10.2.0 is vulnerable to Use-After-Free via /openNDS/src/auth.c. Rated medium severity (CVSS 5.5), this vulnerabi
An issue was discovered in the captive portal in OpenNDS before version 10.1.3. Rated high severity (CVSS 7.5), this vul
An issue was discovered in OpenNDS Captive Portal before version 10.1.2. Rated high severity (CVSS 7.5), this vulnerabil
An issue was discovered in OpenNDS Captive Portal before version 10.1.2. Rated high severity (CVSS 7.5), this vulnerabil
An issue was discovered in OpenNDS Captive Portal before version 10.1.2. Rated high severity (CVSS 7.5), this vulnerabil
An issue was discovered in OpenNDS Captive Portal before 10.1.2. Rated high severity (CVSS 7.5), this vulnerability is r
An issue was discovered in OpenNDS Captive Portal before version 10.1.2. Rated medium severity (CVSS 6.5), this vulnerab
EUVD-2026-67362
GHSA-2h6c-w4mg-27v5
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB