Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate to Nginx-UI as low-privilege user
-
DeliveryCall MCP nginx_config_add with malicious directive
-
ExploitBypass missing ValidateConfigFile check
-
ExecutionWrite config and trigger nginx reload
-
PersistLoad Perl/njs/Lua module code
-
ImpactExecute arbitrary code as nginx
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V15 - Secure Coding and Architecture Protection mechanism completeness
|
| Exploitation Conditions | Exploitation requires (1) an authenticated Nginx-UI session at minimum a low-privilege user (CVSS PR:L), and (2) use of the MCP tool nginx_config_add rather than the REST endpoint POST /api/configs - the REST path calls config.ValidateConfigFile and correctly rejects dangerous directives, so only the MCP flow is vulnerable. The arbitrary-config-write and nginx-reload primitive works against any affected version (2.0.0-rc.6 through 2.4.0) regardless of modules. The full Remote Code Execution outcome additionally requires the target nginx to have the Perl, njs, or Lua module loaded so that injected directives such as perl, js_import, or load_module actually execute code. Limiting factors for defenders: valid authentication is mandatory (not internet-anonymous), the MCP interface must be reachable/enabled, and without a scripting module loaded the impact is config tampering rather than direct code execution. |
| Impact | This is a genuine priority within its (limited) deployment footprint rather than a high-CVSS paper tiger. The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N) indicates a network-reachable, low-complexity flaw requiring only low privileges (PR:L = authenticated), scoring 8.8. The signals are internally consistent: the description confirms the flaw is post-authentication, matching PR:L, and the attack is a straightforward API request, matching AC:L. However, the top-end impact (full RCE, hence C:H/I:H/A:H) is CONDITIONAL - the description explicitly states RCE only materializes 'on a server with the nginx Perl, njs, or Lua module loaded.' Without such a module, the attacker still achieves an arbitrary nginx-config write (a serious integrity/availability issue and a likely stepping stone), but not immediate code execution, so the real-world worst case depends on target configuration. No EPSS score, no CISA KEV listing, and no public exploit were provided in the input; the fix commit and a security advisory exist but a weaponized PoC is not referenced. CWE-693 (Protection Mechanism Failure) accurately frames the root cause: the MCP code path omits config.ValidateConfigFile that the REST path enforces. Net assessment: elevated risk for exposed Nginx-UI instances where any attacker can obtain a low-privilege authenticated session, tempered by the authentication requirement and the module-loaded precondition for the RCE outcome. No SSVC decision data was supplied in the input. |
| Exploit ScenarioDerived | An attacker who has obtained any authenticated Nginx-UI session (low-privilege account) invokes the MCP tool nginx_config_add to write an nginx configuration containing a normally-blocked directive such as load_module, perl, or js_import, which the MCP path fails to validate before reloading nginx. If the server has the Perl, njs, or Lua module available, the injected directive executes attacker-controlled code with nginx's privileges, yielding post-authentication remote code execution. No public exploit is referenced in the input, so exploitation would rely on attacker-developed tooling against the documented MCP flow. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Configuration-validation bypass in Nginx UI (versions 2.0.0-rc.6 through 2.4.0) lets an authenticated low-privilege user write arbitrary nginx configuration directives through the MCP tool nginx_config_add, which persists the file and triggers an nginx reload without ever calling config.ValidateConfigFile - the guard the REST endpoint POST /api/configs does invoke. Because blocked directives such as perl, js_import, load_module and user root can therefore be injected, an attacker on a host with the nginx Perl, njs or Lua module loaded can escalate this into post-authentication remote code execution; on hosts without a scripting module the effect is arbitrary config tampering and reload. The issue is fixed in Nginx UI 2.4.1, and no public exploit code or confirmed active exploitation has been identified at time of analysis.
RemediationAI
Vendor-released patch: 2.4.1 - upgrade Nginx UI to v2.4.1 or later (release notes: https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1), which restores config.ValidateConfigFile enforcement on the MCP nginx_config_add path per commit 23d1934099b05b2a01589b48129dc3d3159d91c2 and adds regression coverage; see also advisory GHSA-9jww-cxg5-rj9m. Where immediate upgrade is not possible, the highest-value compensating control is to disable or network-restrict the MCP interface entirely (bind it to localhost or a trusted management VLAN via firewall/reverse-proxy ACLs and disable the MCP endpoint if unused) - this removes the vulnerable write path, at the cost of losing MCP-based automation. Additionally, remove or unload the nginx Perl, njs, and Lua modules from managed servers (load_module directives for ngx_http_perl_module, ngx_http_js_module, ngx_http_lua_module) so that injected directives cannot execute code, degrading the impact from RCE to config tampering - though this breaks legitimate Perl/njs/Lua deployments. Finally, enforce least privilege on Nginx UI accounts, require secure sessions/2FA for mutating operations, audit nginx-ui users, and review nginx configuration files plus reload history for unexpected perl, js_import, js_content, load_module, or user directives as an indicator of attempted exploitation. Note that the REST path (POST /api/configs) is not affected and validation cannot be bypassed there.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Nginx UI is a Go/Gin-based web control plane for the nginx web server, exposing both a REST API and an MCP (Model Context Protocol) tool interface for programmatic configuration management. The root cause is CWE-693 (Protection Mechanism Failure): the two write paths diverge in their security checks. The REST handler for POST /api/configs calls config.ValidateConfigFile, which rejects dangerous nginx directives (perl, js_import, js_content, load_module, user root, and similar), whereas the MCP tool nginx_config_add performs a direct file write followed by an nginx reload with no equivalent validation. Validation here is the platform's entire defense against configuration-driven code execution, so its absence in one code path nullifies the control. Exploitation is a two-stage primitive: the validation gap yields arbitrary config write and reload against any affected version, while the RCE outcome depends on an environment precondition - nginx must have the Perl, njs, or Lua module loaded so that injected directives resolve to executable code, as reflected in the affected CPE cpe:2.3:a:0xjacky:nginx-ui:*:*:*:*:*:*:*:* and CVSS vector CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (PR:L, authenticated). The upstream fix is commit 23d1934099b05b2a01589b48129dc3d3159d91c2, accompanied by security_test.go regression tests, and is released as v2.4.1.
Know when Nginx Ui 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:H/A:H
Network-reachable MCP call, low complexity, needs a low-privilege authenticated session (PR:L); arbitrary config write plus module-based RCE justifies high C/I/A, scope unchanged.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Nginx UI is a web user interface for the Nginx web server. From 2.0.0-rc.6 until 2.4.1, the MCP tool nginx_config_add writes nginx configuration files to disk and triggers an nginx reload without calling config.ValidateConfigFile. The identical flow in the REST API (POST /api/configs) does call that function and correctly rejects dangerous directives. An authenticated attacker can exploit this gap to write config files containing any blocked directive (perl, js_import, load_module, user root, etc.), bypassing nginx-ui's entire security layer. On a server with the nginx Perl, njs, or Lua module loaded, this is post-authentication Remote Code Execution. This issue is fixed in version 2.4.1.
Articles & Coverage 2
Executive ViewAI
A configuration-validation bypass in Nginx UI (versions 2.0.0-rc.6 through 2.4.0) allows a user with access to the management interface to inject nginx directives that the product's own REST endpoint would normally reject, silently rewriting the web server's configuration and forcing a reload. On any host where the nginx Perl, njs or Lua module is loaded, this can be escalated to remote code execution as the nginx service account; elsewhere it still yields unauthorized configuration tampering. Because Nginx UI is a central control plane for the web tier, compromise of a single instance can affect every site and service that server fronts, making this a priority for teams running the affected versions.
Apply vendor patch (Nginx UI 2.4.1). Where upgrading is not immediately possible, restrict management and MCP tool access to trusted networks, disable the nginx_config_add MCP tool, remove unnecessary nginx Perl/njs/Lua modules to break the code-execution path, and monitor nginx configuration writes and reloads for unauthorized directives.
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
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Unauthenticated backup download and RCE in Nginx UI before 2.3.3. EPSS 1.0%. PoC available.
Nginx UI is a web user interface for the Nginx web server. Rated high severity (CVSS 8.9), this vulnerability is remotel
Unauthenticated attackers can hijack the administrator account during nginx-ui's first-run installation window by claimi
Nginx UI is a web user interface for the Nginx web server. Rated high severity (CVSS 7.7), this vulnerability is remotel
nginx-ui prior to version 2.3.8 exposes sensitive configuration values including node.secret via an authenticated GET /a
Nginx-UI is a web interface to manage Nginx configurations. Rated critical severity (CVSS 9.8), this vulnerability is re
Authenticated administrators of Nginx UI releases 2.3.8 through 2.4.x can achieve remote code execution on the host by a
Remote code execution as root in nginx-ui versions before 2.3.8 via unauthenticated backup restore within 10-minute star
Nginx UI installations before 2.4.1 expose two account-security endpoints, POST /api/otp_enroll and POST /api/finish_pas
Configuration validation bypass in Nginx UI (nginx-ui) prior to 2.4.1 lets an authenticated user with configuration-writ
Ordinary authenticated users of clustered Nginx UI deployments can read the cluster node token from the JSON responses o
Missing second-factor step-up enforcement in the Nginx UI cluster API (versions 2.0.0 through 2.4.x) allows anyone holdi
EUVD-2026-97908
GHSA-9jww-cxg5-rj9m
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB