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-2025-69223

AIOHTTP Zip Bomb Denial of Service (CVE-2025-69223)

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 28, 2026·7 min read·56 visits

Executive Summary (TL;DR)

Unauthenticated remote DoS in AIOHTTP via zip bomb. Attackers send small compressed payloads that expand to fill server memory. Fixed in version 3.13.3.

A high-severity Denial of Service (DoS) vulnerability exists in the AIOHTTP asynchronous HTTP client/server framework for Python (versions 3.13.2 and earlier). The flaw resides in the `auto_decompress` feature of the HTTP parser, which lacks appropriate size limits for decompressed data. This omission allows unauthenticated remote attackers to execute 'zip bomb' attacks, where a small, highly compressed request body expands into a massive payload in memory, causing resource exhaustion and server crashes.

Vulnerability Overview

AIOHTTP is a foundational asynchronous HTTP client/server framework for Python, widely used in modern microservices and web applications to handle concurrent connections efficiently. The framework supports automatic decompression of HTTP request bodies to simplify payload handling for developers. However, prior to version 3.13.3, this feature contained a critical oversight in its resource management logic.

The vulnerability, designated CVE-2025-69223, is a classic 'zip bomb' or decompression bomb scenario (CWE-409). When the auto_decompress setting is enabled (which is often the default or easily toggled configuration for handling compressed uploads), the server accepts request bodies encoded with algorithms such as gzip, deflate, brotli, or zstd. The parsing logic attempts to decompress the entire stream into memory without enforcing a maximum expansion limit.

This flaw allows an attacker to craft a malicious HTTP request with a high compression ratio—for example, a payload of a few kilobytes that decompresses into gigabytes of data. As the server processes this request, it allocates memory to store the decompressed output until the system's available RAM is exhausted, leading to an Out-of-Memory (OOM) crash or severe performance degradation affecting all users.

Root Cause Analysis

The root cause of CVE-2025-69223 lies in the implementation of the DeflateBuffer and DecompressionBaseHandler classes within aiohttp/http_parser.py and aiohttp/compression_utils.py. The framework delegates decompression to underlying Python libraries or bindings (such as zlib, brotli, or zstd) but failed to restrict the output size during the stream processing phase.

In the vulnerable versions, the feed_data method reads chunks of compressed data from the wire and passes them directly to the decompression context. While the input size might be small (and thus pass standard Content-Length checks), the output size is determined solely by the data's entropy. The parser lacked a mechanism to track the cumulative size of the decompressed data and abort the operation if a safety threshold was breached.

Specifically, the decompress calls inside the parsing loop did not utilize the max_length parameter (or equivalent) available in modern decompression APIs. This absence meant that the expansion loop would continue until the decompression was complete or the operating system terminated the process due to memory exhaustion. This represents a failure to implement Resource Allocation Throttling (CWE-770), effectively granting external actors control over the server's memory allocation.

Code Analysis: The Fix

The remediation in version 3.13.3 introduces a robust enforcement mechanism for decompression limits. The fix involves three key changes: defining a default limit, tracking the output size, and raising an exception when the limit is exceeded.

Below is a conceptual reconstruction of the patch applied to aiohttp/http_parser.py and related utilities.

Vulnerable Logic (Simplified):

# Inside the parsing loop, data is decompressed without limits
def feed_data(self, chunk):
    # ... (code omitted)
    try:
        # The decompressor simply expands whatever it receives
        decoded_chunk = self.decompressor.decompress(chunk)
        self.payload.write(decoded_chunk)
    except Exception:
        # Generic error handling
        pass

Patched Logic (Simplified):

DEFAULT_MAX_DECOMPRESS_SIZE = 2**25  # 32 MiB limit
 
class DecompressionBaseHandler:
    def __init__(self, encoding, max_decompress_size=DEFAULT_MAX_DECOMPRESS_SIZE):
        self._max_decompress_size = max_decompress_size
        # ...
 
    def decompress_sync(self, data):
        # Check if the underlying library supports max_length
        try:
            # Enforce the limit directly in the decompress call
            return self.decompressor.decompress(
                data, 
                max_length=self._max_decompress_size
            )
        except (zlib.error, brotli.error) as exc:
            # Handle specific decompression errors
            raise DecompressionError() from exc

The patch introduces DEFAULT_MAX_DECOMPRESS_SIZE, set to 32 MiB. If a request body expands beyond this threshold, the parser now raises a ContentEncodingError (specifically wrapping a DecompressSizeError), causing the connection to close immediately and freeing the allocated resources before they impact system stability.

Exploitation Scenario

Exploiting this vulnerability requires no authentication and can be performed with standard HTTP tooling, provided the attacker can construct a valid compressed payload. The attack targets endpoints that accept POST or PUT requests and respect the Content-Encoding header.

Attack Workflow:

  1. Payload Creation: The attacker generates a "zip bomb." A common technique is to create a stream of zeros or repeating characters, which compresses extremely efficiently. For example, 1 GB of zeros can be compressed into a generic gzip file of roughly 1 MB.
  2. Request Construction: The attacker sends an HTTP POST request with the header Content-Encoding: gzip (or deflate, br). The body of the request contains the malicious compressed payload.
  3. Execution: The AIOHTTP server receives the header and initializes the decompression handler. As it reads the 1 MB stream, it attempts to expand it back to 1 GB in memory.
  4. Result: If the attacker sends multiple concurrent requests (or a single sufficiently large bomb), the server's memory is exhausted, triggering the OOM killer or causing the application to hang indefinitely.

Impact Assessment

The impact of CVE-2025-69223 is strictly a Denial of Service, but the severity is High (CVSS 7.5) due to the ease of exploitation and the potential for total service disruption. Unlike complex memory corruption bugs, this vulnerability relies on logical resource mismanagement, making it reliable and platform-independent.

Operational Impact:

  • Service Availability: A single attacker can crash multiple worker processes, rendering the web application unavailable to legitimate users.
  • Resource Costs: In cloud environments with auto-scaling enabled, this attack could trigger the provisioning of new instances to handle the perceived load/failure, leading to financial impact (Denial of Wallet).
  • Cascading Failure: If the AIOHTTP service acts as a gateway or middleware, its failure can disrupt dependent microservices.

There is no impact on Confidentiality or Integrity; the attacker cannot read memory or execute arbitrary code through this vector. The risk is purely regarding availability.

Mitigation & Remediation

The primary remediation is to upgrade the aiohttp library to version 3.13.3 or later. This version enforces a hard limit of 32 MiB on decompressed data by default, which is sufficient for most standard API interactions but small enough to prevent memory exhaustion attacks.

Remediation Steps:

  1. Identify Affected Services: Scan your dependency trees (e.g., pip freeze or poetry show) for aiohttp versions <= 3.13.2.
  2. Update Dependencies: Execute the upgrade command:
    pip install --upgrade aiohttp
    # OR
    poetry update aiohttp
  3. Verify Configuration: If your application legitimately handles request bodies larger than 32 MiB that are also compressed, you may need to adjust the max_field_size or implement custom handling, though the patch specifically targets the decompression step handled by the parser.

Defensive Coding (Workarounds):

If an immediate upgrade is impossible, developers should disable auto_decompress in their server configuration or middleware and handle decompression manually in the application logic. This allows developers to read the stream in chunks and count the bytes, aborting if the total size exceeds a safe threshold (e.g., 10 MB). Additionally, implementing a Web Application Firewall (WAF) rule to block requests with Content-Encoding from untrusted sources serves as a temporary stopgap.

Official Patches

aio-libsRelease notes for v3.13.3 containing the security fix

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Python web applications using aiohttp serverMicroservices built on aiohttpAPI gateways utilizing aiohttp for proxying

Affected Versions Detail

Product
Affected Versions
Fixed Version
aiohttp
aio-libs
<= 3.13.23.13.3
AttributeDetail
CWE IDCWE-409 (Improper Handling of Highly Compressed Data)
CVSS v3.17.5 (High)
Attack VectorNetwork (HTTP)
ImpactDenial of Service (Memory Exhaustion)
AuthenticationNone Required
Patch StatusFixed in 3.13.3

MITRE ATT&CK Mapping

T1499.004Endpoint Denial of Service: Application Exhaustion Flood
Impact
CWE-409
Improper Handling of Highly Compressed Data

The application does not properly control the amount of resources used when handling highly compressed data, leading to a denial of service.

Vulnerability Timeline

Fix committed to main branch
2026-01-03
Vulnerability Published
2026-01-05
Third-party advisories released
2026-01-22

References & Sources

  • [1]GitHub Security Advisory GHSA-6mq8-rvhq-8wgg
  • [2]NVD - CVE-2025-69223

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 4 hours ago•CVE-2026-48861
2.1

CVE-2026-48861: HTTP Request Splitting and Smuggling via Method Parameter CRLF Injection in Elixir Mint

CVE-2026-48861 is a client-side HTTP request-line CRLF (Carriage Return Line Feed) injection vulnerability in the popular Elixir HTTP client library, Mint. The vulnerability permits HTTP Request Splitting and HTTP Request Smuggling when an application forwards untrusted, attacker-controlled inputs to Mint's HTTP client requests as either the HTTP request method or target. By embedding CRLF characters within these parameters, an attacker can terminate the request line prematurely, inject malicious headers, or pipeline entirely independent requests. These smuggled requests are then processed by upstream or downstream proxy servers as separate HTTP queries on the same TCP connection. While Mint version 1.7.0 introduced target validation to secure the request target, the HTTP request method parameter remained completely unvalidated. This flaw allows attackers to bypass routing filters, access restricted internal APIs, or poison HTTP caches under default configurations.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 5 hours ago•CVE-2026-49753
6.3

CVE-2026-49753: HTTP Request/Response Smuggling via Inconsistent Content-Length Parsing in Elixir Mint Client

An Inconsistent Interpretation of HTTP Requests (HTTP Request/Response Smuggling) vulnerability in the Elixir Mint HTTP client allows attacker-controlled HTTP/1 servers to desynchronize response framing on shared connections due to over-lenient parsing of sign-prefixed Content-Length headers.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 5 hours ago•CVE-2026-49754
8.2

CVE-2026-49754: Denial of Service via Unbounded HTTP/2 CONTINUATION Frame Accumulation in Elixir Mint

An allocation of resources without limits or throttling vulnerability in Elixir Mint allows an attacker-controlled HTTP/2 server to exhaust memory in a Mint client. The vulnerability is exploited by sending a HEADERS frame without the END_HEADERS flag followed by an infinite stream of CONTINUATION frames. Because the client lacks limits on the incoming header-block accumulator, the client continuously consumes memory until an out-of-memory crash occurs.

Amit Schendel
Amit Schendel
7 views•6 min read
•about 6 hours ago•CVE-2026-48596
2.1

CVE-2026-48596: Improper Neutralization of CRLF Sequences in Elixir Tesla Multipart HTTP Client

CVE-2026-48596 is an Improper Neutralization of CRLF Sequences in HTTP Headers (HTTP Request/Response Splitting, CWE-113) in the Elixir Tesla HTTP client. The flaw resides in how multipart content-type parameters are joined and serialized, enabling attackers to inject arbitrary headers or split HTTP requests when applications pass untrusted inputs to the parameters of multipart uploads.

Alon Barad
Alon Barad
5 views•6 min read
•about 6 hours ago•CVE-2026-48594
8.2

CVE-2026-48594: Decompression Bomb Denial of Service in Elixir Tesla HTTP Client

An improper handling of highly compressed data (decompression bomb) vulnerability exists in the Elixir Tesla HTTP client when utilizing response decompression middlewares. By serving highly compressed responses or stacked content-encoding headers, a malicious server can cause arbitrary heap exhaustion, leading to a denial of service (DoS) crash in the BEAM virtual machine.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 7 hours ago•CVE-2026-48595
8.2

CVE-2026-48595: Cross-Origin Credential Leakage in Elixir Tesla Client via Case-Sensitive Redirect Filter Bypass

A high-severity security vulnerability in Elixir's Tesla HTTP client library (CVE-2026-48595) allows unauthenticated remote attackers to harvest sensitive credentials, including Authorization headers and cookies. The flaw resides in the 'Tesla.Middleware.FollowRedirects' component, which performs case-sensitive lookups when stripping credentials during cross-origin redirects. Because HTTP headers are case-insensitive by RFC specifications, standard canonical casing (e.g., 'Authorization') bypasses the lowercase-only blocklist, leaking tokens to untrusted external redirect destinations.

Alon Barad
Alon Barad
6 views•5 min read