Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain victim JWT via session/token theft
-
DeliveryPOST to /api/finish_passkey_register or /api/otp_enroll
-
ExploitBind attacker-controlled passkey or TOTP secret
-
ExecutionRetain access despite victim password change
-
ImpactPersistent Nginx UI account takeover
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Authentication mechanism validation
MITRE ATT&CK
2 techniques across 2 tactics: Defense Evasion, 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 attacker to already possess a valid authenticated session (a stolen JWT) for the target user - exploitation is not possible unauthenticated (PR:L). The two vulnerable endpoints, POST /api/otp_enroll and POST /api/finish_passkey_register, were registered outside the RequireSecureSession middleware and do not re-verify the current password. For the TOTP path, a limiting precondition applies: the victim must NOT have already enabled TOTP, because that path relies on an existing-enrollment guard; the passkey registration path has no equivalent guard and is exploitable regardless of prior enrollment. No user interaction by the victim is needed. The principal limiting factor is the prerequisite theft of a live session token, so defenders should weigh JWT/session exposure (XSS, token leakage) as the true gating condition. |
| Impact | Signals are mixed and must be read together. The NVD CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N, C:H/I:H/A:H = 8.8) indicates a network-reachable, low-complexity flaw with high impact, but the PR:L metric is decisive: exploitation is NOT unauthenticated - it requires the attacker to already hold a valid victim session (a stolen JWT), as the description explicitly states. This makes the vulnerability a post-compromise persistence/account-takeover primitive rather than a standalone wormable entry point. No EPSS score, SSVC decision, or KEV status was supplied in the input, so widespread-exploitation probability cannot be quantified and there is no evidence of active exploitation. No public exploit code was identified; the only source-code artifact is the vendor's remediation commit, not a weaponized POC. Net assessment: a genuinely serious issue for anyone running Nginx UI (full management-panel takeover that survives a password change), but realistic urgency is gated by the prerequisite JWT theft and tempered by the absence of KEV/EPSS/POC signals. Treat as a high-priority patch for exposed Nginx UI instances while recognizing it is conditional, not drive-by. EPSS data is missing and should be checked before final prioritization. |
| Exploit ScenarioDerived | An attacker who has obtained a legitimate user's JWT (e.g., via XSS, session theft, or a leaked token) sends a POST to /api/finish_passkey_register or /api/otp_enroll, which the server processes without re-verifying the current password or requiring a secure session. The attacker binds their own passkey (or a TOTP secret if the victim had none enrolled), establishing a second authentication factor they control. No public exploit code exists, but the attack is low-complexity and the fix commit reveals the exact unguarded endpoints. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 12, 2026
Nginx UI installations before 2.4.1 expose two account-security endpoints, POST /api/otp_enroll and POST /api/finish_passkey_register, that let an attacker holding a stolen, valid JWT bind an attacker-controlled TOTP secret or register an attacker-controlled passkey against the victim's account, producing persistent access that survives a password change. The CVSS vector (AV:N/AC:L/PR:L/UI:N) confirms exploitation requires an authenticated session rather than being unauthenticated, and no public exploit code has been identified at time of analysis. The TOTP path only succeeds if the victim has not already enabled TOTP, because it relies on an existing-enrollment guard, whereas the passkey registration path has no equivalent guard and is exploitable regardless of prior enrollment.
RemediationAI
Vendor-released patch: 2.4.1 - upgrade Nginx UI to 2.4.1 or later (release https://github.com/0xJacky/nginx-ui/releases/tag/v2.4.1, fix commit 23d1934099b05b2a01589b48129dc3d3159d91c2, advisory https://github.com/0xJacky/nginx-ui/security/advisories/GHSA-gfrc-g87h-7h5w). Because exploitation depends on possession of a live session token, remediation should also include auditing and revoking active JWTs and rotating the JWT signing secret so stolen tokens become useless, shortening session/JWT lifetimes to reduce the theft window, and reviewing each account's TOTP and passkey enrollment records to detect and remove any attacker-bound factors (re-checking recovery codes and passkey lists, not just TOTP status). If immediate upgrade is not possible, the actionable compensating control is to block POST /api/otp_enroll and POST /api/finish_passkey_register at the reverse proxy for all clients, with the trade-off that legitimate users cannot enroll a new second factor until the block is lifted - so pair it with a scheduled maintenance window - and additionally restrict who can reach the Nginx UI API at all (IP allowlisting or an authenticating proxy); note that the same fix commit also adds RequireSecureSession to backup creation and auto-backup mutation/restore/test_s3 routes, so partial backports that change only the two OTP/passkey handlers leave that adjacent surface exposed. Also review logs and upstream proxies for token leakage or XSS that would have enabled token theft, since that is the true gating precondition.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in go
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 web interface for the Nginx web server. The root cause is CWE-287 (Improper Authentication): the router registrations for POST /api/otp_enroll and POST /api/finish_passkey_register sit outside the RequireSecureSession middleware, so they accepted an ordinary authenticated (JWT-bearing) session without re-verifying the account password. The purpose of RequireSecureSession is exactly that step-up check - forcing a fresh password confirmation before a security-sensitive change - so its omission on enrollment endpoints meant a bearer token alone was sufficient to alter second-factor state: adding a TOTP shared secret to an account with no TOTP configured, or registering a WebAuthn/FIDO2 passkey. The enrollment guard that blocks overwriting an existing TOTP secret does not exist on the passkey-registration path, making that endpoint the more broadly reachable of the two. The same commit that fixes this (23d1934099b05b2a01589b48129dc3d3159d91c2) also extends RequireSecureSession to backup creation, auto-backup mutation/restore/test_s3 and related mutation routes, indicating a general hardening pass on state-changing endpoints in the product rather than a single-line fix. No CPE strings were supplied in the source data, so affected build identification relies on the vendor release tag v2.4.1 and the upstream GitHub advisory GHSA-gfrc-g87h-7h5w.
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 API reachable with a stolen authenticated session (PR:L), low complexity; account takeover of a management panel yields full confidentiality, integrity, and availability impact including locking out the legitimate user.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
Nginx UI is a web user interface for the Nginx web server. Prior to 2.4.1, POST /api/otp_enroll and POST /api/finish_passkey_register are registered outside RequireSecureSession and accept a normal authenticated session without verifying the current password. An attacker with a stolen JWT can bind an attacker-controlled TOTP secret when the victim has not already enabled TOTP, or can register an attacker-controlled passkey because that path has no equivalent existing-enrollment guard. These changes create persistent account access that can survive a password change and interfere with the legitimate user's authentication. This issue is fixed in version 2.4.1.
Articles & Coverage 2
Executive ViewAI
Nginx UI deployments running versions prior to 2.4.1 contain a high-severity account-security flaw that lets someone already holding a valid session token silently bind their own multi-factor authenticator or passkey to another user's account. The resulting access persists even after the victim changes their password, meaning standard credential-reset procedures will not remove the intruder from the Nginx UI management plane that controls web traffic configuration. Leadership should treat this as an identity-integrity risk to privileged administrative accounts rather than a routine software defect, since it undermines the very recovery step organizations rely on after a suspected compromise.
No vendor-released patch identified at time of analysis; interim mitigations are to restrict Nginx UI management interfaces to trusted networks or VPN-only access, invalidate active sessions and rotate JWT signing secrets to defeat stolen tokens, audit and remove unauthorized TOTP secrets or passkeys, require phishing-resistant re-verification for administrative account changes, and monitor or block POST requests to /api/otp_enroll and /api/finish_passkey_register from unexpected sources.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
Configuration-validation bypass in Nginx UI (versions 2.0.0-rc.6 through 2.4.0) lets an authenticated low-privilege user
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-97865
GHSA-gfrc-g87h-7h5w
NVD
CVE.org
EPSS
Exploit-DB