Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach Nginx UI behind bundled proxy
-
ExploitSubmit repeated failed logins externally
-
ExecutionRequests collapsed to loopback identity
-
ImpactTrigger shared temporary auth ban
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Origin validation
|
| Exploitation Conditions | Applies to Nginx UI versions 2.2.0 up to (but not including) 2.6.0 ONLY when the application is reached through its bundled reverse proxy and the backend has no trusted-proxy configuration, so Gin cannot derive the real client IP and attributes all traffic to loopback. The DoS path (shared login ban for password/OTP) requires no authentication and no user interaction. The separate IP-allowlist loopback-exception bypass is strongly LIMITED because valid credentials are still required; the ban itself is temporary and does NOT invalidate existing sessions, so it is a transient availability impact rather than account takeover. Deployments that already set trusted proxies or do not front the UI with the bundled proxy are not affected. |
| Impact | This is a genuinely medium/low-priority issue despite a web-facing attack surface. The provided CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L, base 5.3) is internally consistent with the description: unauthenticated and network-reachable, but with ZERO confidentiality and integrity impact and only LOW availability impact. The real-world effect is a temporary, shared authentication ban (a denial-of-service against the login flow) that does NOT invalidate existing sessions and does NOT grant access - valid credentials are still required for the loopback allowlist bypass path. No EPSS score, no CISA KEV listing, and no public POC were provided; the only 'source code evidence' is the vendor's own fix commit, not exploit code. There is no conflict among the signals, but note the input Tags label this 'Information Disclosure', which contradicts the CVSS (C:N) and the CWE - this is an origin-validation/DoS issue, not disclosure. Net: a legitimate availability nuisance worth patching during normal cycles, not an emergency. |
| Exploit ScenarioDerived | An attacker reachable over the network sends repeated failed login attempts (password or OTP) to an Nginx UI instance deployed behind its bundled reverse proxy without trusted-proxy configuration. Because every external client is attributed to the loopback address, the failures accumulate against one shared identity and trip the temporary login ban, locking out legitimate operators from authenticating. No public exploit code was identified at time of analysis; the only available artifact is the vendor fix commit. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 09, 2026
Nginx UI versions 2.2.0 up to but not including 2.6.0 mis-attribute client identity when the application is reached through its bundled reverse proxy without trusted-proxy configuration, so every request appears to originate from loopback. The practical unauthenticated impact (CVSS 5.3, PR:N) is a shared, temporary login ban: failed password or OTP attempts from different external clients are all counted against 127.0.0.1, letting an attacker lock out the login endpoint for legitimate users without invalidating existing sessions. A separate consequence is that management requests can satisfy the loopback exception in the IP allowlist, but this path is strongly limited because valid credentials are still required, so it does not amount to authentication bypass or account takeover. No public exploit code has been identified at time of analysis, and the issue is fixed in version 2.6.0.
RemediationAI
Vendor-released patch: upgrade to Nginx UI v2.6.0 (https://github.com/0xJacky/nginx-ui/releases/tag/v2.6.0), which contains commit e30e331303fc21cf077a2bea724bd79e66892eaf and introduces the trusted-proxy handling; the advisory is at https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-9h23-53f4-q947. After upgrading, explicitly set TrustedProxies in app.ini (AuthSettings.TrustedProxies / the TrustedProxies entry in app.example.ini) to the loopback address or CIDR of the bundled proxy so Gin recovers the real external client IP; leaving the value empty preserves the vulnerable attribution behavior, so the upgrade alone must be paired with this configuration on proxy-fronted deployments. If an immediate upgrade is not possible, compensating controls are: (1) do not expose the management/login endpoints through the bundled proxy to untrusted networks - bind Nginx UI to a management interface only reachable over VPN or an internal network, accepting the loss of remote administrative access; (2) raise the ban threshold or temporarily disable the login-ban (ban_threshold_minutes / max_attempts) to blunt the shared-lockout DoS, at the cost of weakening brute-force protection on the same login path; and (3) front the UI with an external proxy that enforces your own IP allowlisting, understanding that this does not by itself fix the loopback attribution inside Gin. Note that neither the ban nor the allowlist issue should be treated as an authentication bypass - valid credentials are still required for management access, and existing authenticated sessions are not invalidated by the ban.
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
The root cause is a CWE-346 origin validation error in the way Nginx UI's Go backend derives the client IP. The app is built on Gin, which by default ignores X-Forwarded-For / X-Real-IP and uses the address of the immediate TCP peer unless a trusted-proxy list is configured. Because the bundled reverse proxy sits between external clients and the backend, Gin sees only the loopback hop, collapsing all distinct external clients into a single 127.0.0.1 identity. That single spoofed identity then flows into two security decisions: the loopback exception in the authentication IP allowlist (auth.ip_white_list), which a remote caller can effectively satisfy (though credentials are still required, so this is not a bypass by itself), and the per-IP rate limiting / temporary ban used for password and OTP logins, which is meant to punish a single abusive client but now punishes everyone. The upstream fix (commit e30e331303fc21cf077a2bea724bd79e66892eaf, shipped in v2.6.0) adds a TrustedProxies setting (AuthSettings.TrustedProxies, exposed as TrustedProxies in app.example.ini and redacted like other sensitive auth fields), so the backend can be told to trust the bundled proxy and recover the genuine external client address; the Diff also updates tests covering the redacted auth-network fields.
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:N/UI:N/S:U/C:N/I:N/A:L
Network-reachable, no auth and no interaction to trigger the shared login ban (PR:N/UI:N), but only transient login DoS so A:L and no C/I impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Nginx UI is a web user interface for the Nginx web server. From 2.2.0 until 2.6.0, the bundled reverse proxy does not preserve the external client identity used by Gin because the backend has no trusted proxy configuration. Management requests can be attributed to loopback and pass the IP allowlist loopback exception, although valid credentials are still required. Failed logins from different external clients are also attributed to the same loopback address, allowing an unauthenticated attacker to trigger a shared temporary login ban for password or OTP authentication without invalidating existing sessions. This issue is fixed in version 2.6.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
Unauthenticated backup download and RCE in Nginx UI before 2.3.3. EPSS 1.0%. PoC available.
Unauthenticated attackers who can reach a fresh, uninitialized Nginx UI instance before version 2.3.8 during its first-r
Nginx UI is a web user interface for the Nginx web server. Rated high severity (CVSS 8.9), this vulnerability is remotel
Nginx UI is a web user interface for the Nginx web server. Rated high severity (CVSS 7.7), this vulnerability is remotel
nginx-ui versions prior to 2.3.8 expose 40+ protected configuration fields through the GetSettings API to authenticated
nginx-ui prior to version 2.3.8 exposes sensitive configuration values including node.secret via an authenticated GET /a
Server-side request forgery in Nginx UI through 2.3.4 lets any authenticated user redirect API requests to an attacker-c
Unauthenticated bootstrap takeover in Nginx UI 2.3.5: any remote client that can reach a still-uninitialized instance du
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
Configuration-validation bypass in Nginx UI (versions 2.0.0-rc.6 through 2.4.0) lets an authenticated low-privilege user
EUVD-2026-95817
GHSA-9h23-53f4-q947
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB