CVE-2026-69244: Heap Out-of-Bounds Read in aiohttp C-Parser Error Handling
Vulnerability ID: CVE-2026-69244
CVSS Score: 7.1
Published: 2026-08-03
A high-severity heap-based out-of-bounds (OOB) read vulnerability exists in the Cython-based HTTP response and request parser extension of aiohttp. When processing malformed HTTP traffic, the parser fails to properly handle raw C pointers returned by the underlying llhttp library during error-message construction. This triggers an uncontrolled strlen() call on non-null-terminated network buffers, which can result in a Denial of Service (DoS) via worker process crash or the exposure of adjacent heap memory inside exception messages.
TL;DR
A heap out-of-bounds read in the C-parser of aiohttp allows unauthenticated remote attackers to crash application processes or leak adjacent heap memory by sending specially crafted malformed HTTP requests or responses.
⚠️ Exploit Status: POC
Technical Details
- CWE ID: CWE-125
- Attack Vector: Network
- CVSS v4.0 Score: 7.1
- EPSS Score: Not Available
- Vulnerability Class: Heap Out-of-Bounds Read
- Exploit Status: Proof-of-Concept (PoC)
- CISA KEV Status: Not Listed
Affected Systems
- aiohttp client-side applications running on versions prior to 3.14.3 with C extensions enabled
- aiohttp server-side applications running on versions prior to 3.14.3 with C extensions enabled
-
aiohttp: < 3.14.3 (Fixed in:
3.14.3)
Code Analysis
Commit: 49f65d5
Fix out-of-bounds heap read in C HTTP parser during error message construction
@@ -675,11 +675,12 @@ cdef class HttpParser:\n ex = self._last_error\n self._last_error = None\n else:\n- after = cparser.llhttp_get_error_pos(self._cparser)\n- before = data[:after - base]\n- after_b = after.split(b"\\r\\n", 1)[0]\n+ error_pos = cparser.llhttp_get_error_pos(self._cparser)\n+ error_off = error_pos - base\n+ before = data[:error_off]\n+ after = data[error_off:].split(b"\\r\\n", 1)[0]\n before = before.rsplit(b"\\r\\n", 1)[-1]\n- data = before + after_b\n+ data = before + after\n pointer = " " * (len(repr(before))-1) + "^"\n ex = parser_error_from_errno(self._cparser, data, pointer)\n self._payload = None
Exploit Details
- aio-libs repository tests: Regression test cases simulating truncated chunked transfer payloads that trigger the C-parser crash.
Mitigation Strategies
- Upgrade aiohttp to version 3.14.3 or later to apply the safe integer-offset parsing logic.
- Disable compiled C extensions by setting AIOHTTP_NO_EXTENSIONS=1 to force the safe pure-Python parser fallback.
- Implement edge web application firewalls (WAF) to block malformed chunked transfer encoding payloads before they reach backend application servers.
Remediation Steps:
- Identify all python environments, Dockerfiles, and requirements.txt files specifying aiohttp.
- Run 'pip install -U aiohttp>=3.14.3' to apply the official vendor patch.
- In legacy environments, add 'ENV AIOHTTP_NO_EXTENSIONS=1' to the container Dockerfile as a temporary hotfix.
- Restart all affected application worker processes and monitor container crash logs for exit code 139 (SIGSEGV).
References
Read the full report for CVE-2026-69244 on our website for more details including interactive diagrams and full exploit analysis.
Top comments (0)