Skip to main content

aiohttp EUVDEUVD-2026-104482

| CVE-2026-111066 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-10-19 GitHub_M GHSA-9xw5-w5jj-pvcg
8.2
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Send crafted multipart requests to a Request.post() handler
  2. Delivery
    Each part opens an unbounded temporary file descriptor
  3. Exploit
    Retained descriptors accumulate across requests
  4. Execution
    Process exhausts its file-descriptor limit
  5. Impact
    Service denial (worker can no longer accept connections)

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK

1 technique across 1 tactic: Impact

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

The target application must expose at least one HTTP handler that calls aiohttp's Request.post() to parse multipart/form-data request bodies; this is the exact code path (per-part temporary file creation in web_request.py) that leaks file descriptors. Affected versions are aiohttp from 2 up to but not including 3.14.4. No authentication is required (PR:N) and no user interaction is needed (UI:N), so any internet-facing endpoint meeting the above is reachable by unauthenticated remote attackers. Limiting factors that reduce real-world exposure: the AT:P attack requirement means services that never accept multipart uploads, or that parse bodies without Request.post() (e.g. streaming/multipart reader APIs), are not exploitable; impact is confined to availability of the affected worker process with no data exposure.

Impact

This is a genuine but bounded availability risk, best triaged as a medium-high operational priority rather than an emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) scores 8.2 and confirms a network-reachable, unauthenticated, low-complexity attack with no user interaction, but the impact is strictly availability (VA:H; VC:N/VI:N/VA via resource exhaustion, CWE-400) - there is no confidentiality or integrity exposure and no scope change to other systems. The single most important mitigating signal is AT:P (attack requirements present): exploitation is only possible against endpoints whose handler actually calls Request.post() to parse multipart bodies, so this is NOT a blanket flaw in every aiohttp deployment. No EPSS score was provided in the input, there is no CISA KEV listing, and no public exploit code was supplied, so exploitation status is: no public exploit identified at time of analysis. Conflicting/missing-data note: EPSS is absent, so probabilistic exploitation likelihood cannot be weighed; the high CVSS (8.2) is driven entirely by easy reachability plus total availability loss, not by breadth of impact, so teams running aiohttp services that accept multipart uploads via Request.post() should patch promptly while those that do not are effectively unaffected.

Exploit ScenarioDerived

An unauthenticated attacker repeatedly sends specially crafted multipart/form-data requests - bodies composed of many small file parts - to an aiohttp endpoint whose handler calls Request.post(). Each part causes a temporary file descriptor to be opened and retained, so the descriptors accumulate without bound until the worker process hits its file-descriptor limit and can no longer serve requests, producing a denial of service. No public exploit code was identified in the provided intelligence; the attack is simple to construct given the low complexity (AC:L) and no required authentication (PR:N).

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 19, 2026

Unauthenticated remote attackers can exhaust file descriptors in aiohttp-based web services by sending crafted multipart/form-data requests to any handler that parses bodies with Request.post(), pushing the worker process toward EMFILE and denying service to legitimate clients. The flaw affects aiohttp releases from version 2 up to but not including 3.14.4, and only services that actually accept multipart uploads through that API are exposed; endpoints that never parse multipart bodies, or that use the streaming multipart reader instead, are not exploitable. No public exploit code has been identified at time of analysis and the issue is not listed in CISA KEV, but the attack requires no authentication or user interaction and is straightforward to script, so internet-facing upload endpoints should be prioritized for patching.

RemediationAI

Vendor-released patch: aiohttp 3.14.4 - upgrade with pip install --upgrade 'aiohttp>=3.14.4' (or pin the dependency and rebuild container images), then verify the running version from package metadata; details are in the advisory at https://github.com/aio-libs/aiohttp/security/advisories/GHSA-9xw5-w5jj-pvcg, the fix commit https://github.com/aio-libs/aiohttp/commit/2d94633b7f1b4c1ba07d647b629a8440652b2d09, and the release notes at https://github.com/aio-libs/aiohttp/releases/tag/v3.14.4. If an immediate upgrade is not possible, several compensating controls reduce but do not eliminate exposure: lower client_max_size on the affected application to a small value, which caps descriptors per request at roughly client_max_size // 1 MiB but also rejects legitimate large uploads; replace Request.post() on multipart endpoints with the streaming MultipartReader and enforce explicit per-part and part-count limits, with the trade-off of writing custom parsing code; cap multipart body size and part count at a front-end reverse proxy such as nginx (client_max_body_size) so hostile bodies are rejected before reaching aiohttp, accepting that the proxy limit applies to all traffic; raise RLIMIT_NOFILE / ulimit -n for worker processes, which only buys headroom and delays rather than prevents exhaustion; and recycle workers aggressively (max_requests, periodic restarts) while monitoring file-descriptor counts and EMFILE errors in logs. Note that descriptors are released when request finalization runs, so a sustained flood, rather than a single request, is what drives the process to exhaustion.

Affected VersionsENISA

aiohttp 2.0.0, < 3.14.4

Affected Packages

pypi aiohttp fix: 3.14.4

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

aiohttp is an asyncio-based HTTP client/server framework for Python, and its server-side request object (aiohttp/web_request.py) implements Request.post() to decode application/x-www-form-urlencoded and multipart/form-data bodies into a MultiDict. In the vulnerable implementation, each file part of a multipart body was materialized with tempfile.TemporaryFile, which allocates a real file descriptor on disk per part. Because the number of parts in a multipart body is attacker-controlled and effectively unbounded, a body composed of many tiny parts caused the process to hold one open descriptor per part for the lifetime of the request, exhausting the process file-descriptor limit (CWE-400, uncontrolled resource consumption). The upstream fix switches part buffering to tempfile.SpooledTemporaryFile with a 1 MiB in-memory threshold (_FILE_SPOOL_MAX_SIZE), so small parts never touch disk and descriptors per request are bounded at roughly client_max_size // 1 MiB; it also adds an early check against payload.total_bytes before the read loop and a per-part size check so oversize parts abort with HTTPRequestEntityTooLarge. Because Python's SpooledTemporaryFile only became an io.IOBase subclass in 3.11, the commit adds a small compatibility shim exposing readable/writable/seekable so the documented FileField.file type still holds on older interpreters.

Know when Aiohttp 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

Vendor (GitHub_M) PRIMARY 8.2 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Network-reachable, unauthenticated, low-complexity descriptor exhaustion with availability-only impact; the Request.post()/multipart precondition is a deployment prerequisite, not attacker complexity, so AC:L and A:H.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Red Hat 7.5 HIGH

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 19, 2026 - 18:03 EUVD
CVE Published
Oct 19, 2026 - 16:59 cve.org
HIGH 8.2

DescriptionCVE.org

AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. From 2 until 3.14.4, multipart request processing can retain an unbounded number of open file descriptors. An unauthenticated attacker can consequently exhaust file descriptors with specially crafted multipart requests when a handler uses Request.post(). This issue is fixed in version 3.14.4.

Technical POC Analysis

CWE-400 (Uncontrolled Resource Consumption), with the advisory also tagging CWE-770 (Allocation of Resources Without Limits or Throttling).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A denial-of-service vulnerability in the aiohttp Python web framework (versions 2.x through 3.14.3) lets remote attackers exhaust file descriptors in any service that parses multipart/form-data uploads through the Request.post() API, driving worker processes to EMFILE and cutting off legitimate users. Leadership should care because the exposed surface is typically customer-facing file upload functionality, the attack is simple to script, and remediation requires a framework upgrade that may ripple across many internal applications and their dependency chains. No public exploit code or CISA KEV listing exists at time of analysis, so this is a manageable-but-urgent engineering hygiene issue rather than an active incident.

Business Impact: High
Compensating Controls

Apply vendor patch: upgrade aiohttp to 3.14.4 or later. Where upgrade cannot be completed immediately, restrict or disable multipart parsing on internet-facing endpoints, front upload paths with a reverse proxy or WAF enforcing strict request-body size and rate limits, refactor exposed handlers to the streaming multipart reader, lower per-process file descriptor limits and worker concurrency to contain EMFILE blast radius, and alert on descriptor-exhaustion metrics.

Threat Intelligence Overview

EPSS Score
0.4%
Top 69% exploitable
Prevalence
High
aiohttp is among the most widely deployed Python async HTTP frameworks
Threat Intel
1
1 source
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub VulDB

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2023-47627 HIGH POC
7.5 Nov 14

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Rated high severity (CVSS 7.5), this vul

CVE-2023-37276 HIGH POC
7.5 Jul 19

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Rated high severity (CVSS 7.5), this vul

CVE-2026-69244 HIGH POC
7.1 Aug 03

Out-of-bounds heap read in aiohttp's C HTTP response parser (versions ≤ 3.14.2) allows an attacker-controlled server to

CVE-2026-59881 MEDIUM POC
6.9 Jul 30

Uncontrolled decompression in aiohttp's WebSocket client prior to version 3.14.2 allows a malicious server to exhaust CP

CVE-2023-47641 MEDIUM POC
6.5 Nov 14

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Rated medium severity (CVSS 6.5), this v

CVE-2026-69243 MEDIUM POC
6.3 Aug 03

HTTP request smuggling in aiohttp's server-side parser allows unauthenticated remote attackers to inject and misdirect H

CVE-2022-33124 MEDIUM POC
5.5 Jun 23

AIOHTTP 3.8.1 can report a "ValueError: Invalid IPv6 URL" outcome, which can lead to a Denial of Service (DoS). Rated me

CVE-2023-49082 MEDIUM POC
5.3 Nov 29

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Rated medium severity (CVSS 5.3), this v

CVE-2023-49081 MEDIUM POC
5.3 Nov 30

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Rated medium severity (CVSS 5.3), this v

CVE-2024-52303 HIGH
8.7 Nov 18

aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Rated high severity (CVSS 8.7), this vul

CVE-2026-111064 HIGH
8.2 Oct 19

Idle or half-open connections to aiohttp server deployments at version 3.14.3 and earlier are never timed out during the

CVE-2025-69223 HIGH
7.5 Jan 05

AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Versions 3.13.2 and below allow a zip bo

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy