---
id: "CVE-2026-111066"
kind: "vulnerability"
aliases: ["CVE-2026-111066", "GHSA-9xw5-w5jj-pvcg"]
title: "AIOHTTP: File descriptor exhaustion in multipart requests"
severity: "high"
cvss: 8.2
epss: 0.003809999907389283
exploited: false
status: "open"
category: "package"
products: [{"name": "aiohttp", "fixed": ["3.14.4"], "affected": ">= 2.0.0, < 3.14.4", "ecosystem": "pypi"}]
ecosystems: ["pypi"]
tags: ["aiohttp", "cwe-400", "cwe-770", "package", "python", "self-hosted"]
not_affected_if: ["no-request-post-usage", "version-3.14.4-or-later"]
published_at: "2026-10-19T17:17:03+00:00"
first_seen_at: "2026-10-23T19:11:32+00:00"
updated_at: "2026-10-23T21:57:18+00:00"
sources: [{"source": "ghsa", "url": "https://github.com/advisories/GHSA-9xw5-w5jj-pvcg", "first_seen_at": "2026-10-23T19:11:32+00:00"}, {"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-111066", "first_seen_at": "2026-10-23T21:57:18+00:00"}]
---

# AIOHTTP: File descriptor exhaustion in multipart requests

aiohttp, a Python async HTTP library, can be made to open an unbounded number of file descriptors when a handler calls Request.post() on a crafted multipart request. An attacker can exhaust file descriptors and cause resource exhaustion on the server.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- pypi:aiohttp affected >= 2.0.0, < 3.14.4 fixed 3.14.4

## How to check

Run pip show aiohttp or python -c "import aiohttp; print(aiohttp.__version__)" and check whether it is >= 2.0.0 and < 3.14.4.
Search the codebase for Request.post( to find handlers that parse multipart bodies.

## Fix

Upgrade aiohttp to 3.14.4 or later (pip install -U "aiohttp>=3.14.4").

## Timeline

- 2026-10-23T19:11:32+00:00 ghsa https://github.com/advisories/GHSA-9xw5-w5jj-pvcg
- 2026-10-23T21:57:18+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-111066

## From the sources

AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. From 2.0.0 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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
