{"id":"CVE-2023-47641","aliases":["AZL-43519","AZL-44538","DEBIAN-CVE-2023-47641","DLA-4041-1","EUVD-2023-0005","GHSA-xx9p-xxvh-7g8j","OESA-2023-1854","PYSEC-2023-247","SUSE-SU-2023:4909-1","SUSE-SU-2024:0577-1","UBUNTU-CVE-2023-47641","openSUSE-SU-2024:13691-1","openSUSE-SU-2026:11467-1"],"status":"published","title":"Inconsistent interpretation of `Content-Length` vs. `Transfer-Encoding` in aiohttp","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","severity":{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00834,"percentile":0.57914,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-444"],"published":"2023-11-14T20:36:25Z","modified":"2026-11-05T05:36:30Z","fixes":[{"ecosystem":"PyPI","package":"aiohttp","fixed_in":["3.8.0"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:12","package":"python-aiohttp","fixed_in":["3.8.1-1"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"python-aiohttp","fixed_in":["3.8.1-1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"python-aiohttp","fixed_in":["3.8.1-1"],"sources":["osv"]},{"ecosystem":"openEuler:20.03-LTS-SP1","package":"python-aiohttp","fixed_in":["3.7.4-2.oe1"],"sources":["osv"]},{"ecosystem":"openEuler:20.03-LTS-SP3","package":"python-aiohttp","fixed_in":["3.7.4-2.oe1"],"sources":["osv"]},{"ecosystem":"openEuler:22.03-LTS","package":"python-aiohttp","fixed_in":["3.7.4-3.oe2203sp2"],"sources":["osv"]},{"ecosystem":"openEuler:22.03-LTS-SP1","package":"python-aiohttp","fixed_in":["3.7.4-3.oe2203sp1"],"sources":["osv"]},{"ecosystem":"openEuler:22.03-LTS-SP2","package":"python-aiohttp","fixed_in":["3.7.4-3.oe2203sp2"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP1","package":"python-aiohttp","fixed_in":["3.6.0-150100.3.12.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP2","package":"python-aiohttp","fixed_in":["3.6.0-150100.3.12.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP3","package":"python-aiohttp","fixed_in":["3.6.0-150100.3.12.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP4","package":"python-aiohttp","fixed_in":["3.6.0-150100.3.12.1"],"sources":["osv"]},{"ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP5","package":"python-aiohttp","fixed_in":["3.6.0-150100.3.12.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Leap 15.4","package":"python-aiohttp","fixed_in":["3.6.0-150100.3.12.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Leap 15.5","package":"python-aiohttp","fixed_in":["3.6.0-150100.3.12.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.8.0"}]}]},{"source":"osv","ecosystem":"Azure Linux:2","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"3.6.2-3"}]}]},{"source":"osv","ecosystem":"Azure Linux:3","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"last_affected":"3.6.2-3"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.8.1-1"}]}]},{"source":"osv","ecosystem":"Debian:13","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.8.1-1"}]}]},{"source":"osv","ecosystem":"Debian:14","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.8.1-1"}]}]},{"source":"osv","ecosystem":"Debian:11","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.7.4-1+deb11u1"}]}],"versions":["3.7.4-1"],"bundled":9},{"source":"osv","ecosystem":"PyPI","package":"aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.8.0"}]}],"versions":["0.1","0.10.0","0.10.1","0.10.2","0.11.0","0.12.0","0.13.0","0.13.1","0.14.0","0.14.1","0.14.2","0.14.3","0.14.4","0.15.0","0.15.1","0.15.2","0.15.3","0.16.0","0.16.1","0.16.2","0.16.3","0.16.4","0.16.5","0.16.6","0.17.0","0.17.1","0.17.2","0.17.3","0.17.4","0.18.0","0.18.1","0.18.2","0.18.3","0.18.4","0.19.0","0.2","0.20.0","0.20.1","0.20.2","0.21.0","0.21.1","0.21.2","0.21.4","0.21.5","0.21.6","0.22.0","0.22.0a0","0.22.0b0","0.22.0b1","0.22.0b2","0.22.0b3","0.22.0b4","0.22.0b5","0.22.0b6","0.22.1","0.22.2","0.22.3","0.22.4","0.22.5","0.3","0.4","0.4.1","0.4.2","0.4.3","0.4.4","0.5.0","0.6.0","0.6.1","0.6.2","0.6.3","0.6.4","0.6.5","0.7.0","0.7.1","0.7.2","0.7.3","0.8.0","0.8.1","0.8.2","0.8.3","0.8.4","0.9.0","0.9.1","0.9.2","0.9.3","1.0.0","1.0.1","1.0.2","1.0.3","1.0.5","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.2.0","1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","2.0.0","2.0.0rc1","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.1.0","2.2.0","2.2.1","2.2.2","2.2.3","2.2.4","2.2.5","2.3.0","2.3.0a1","2.3.0a2","2.3.0a3","2.3.0a4","2.3.1","2.3.10","2.3.1a1","2.3.2","2.3.2b2","2.3.2b3","2.3.3","2.3.4","2.3.5","2.3.6","2.3.7","2.3.8","2.3.9","3.0.0","3.0.0b0","3.0.0b1","3.0.0b2","3.0.0b3","3.0.0b4","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.0.8","3.0.9","3.1.0","3.1.1","3.1.2","3.1.3","3.2.0","3.2.1","3.3.0","3.3.0a0","3.3.1","3.3.2","3.3.2a0","3.4.0","3.4.0a0","3.4.0a3","3.4.0b1","3.4.0b2","3.4.1","3.4.2","3.4.3","3.4.4","3.5.0","3.5.0a1","3.5.0b1","3.5.0b2","3.5.0b3","3.5.1","3.5.2","3.5.3","3.5.4","3.6.0","3.6.0a0","3.6.0a1","3.6.0a11","3.6.0a12","3.6.0a2","3.6.0a3","3.6.0a4","3.6.0a5","3.6.0a6","3.6.0a7","3.6.0a8","3.6.0a9","3.6.0b0","3.6.1","3.6.1b3","3.6.1b4","3.6.2","3.6.2a0","3.6.2a1","3.6.2a2","3.6.3","3.7.0","3.7.0b0","3.7.0b1","3.7.1","3.7.2","3.7.3","3.7.4","3.7.4.post0","3.8.0a7","3.8.0b0"]},{"source":"osv","ecosystem":"openEuler:20.03-LTS-SP1","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.7.4-2.oe1"}]}]},{"source":"osv","ecosystem":"openEuler:20.03-LTS-SP3","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.7.4-2.oe1"}]}]},{"source":"osv","ecosystem":"openEuler:22.03-LTS","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.7.4-3.oe2203sp2"}]}]},{"source":"osv","ecosystem":"openEuler:22.03-LTS-SP1","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.7.4-3.oe2203sp1"}]}]},{"source":"osv","ecosystem":"openEuler:22.03-LTS-SP2","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.7.4-3.oe2203sp2"}]}]},{"source":"osv","ecosystem":"PyPI","package":"aiohttp","ranges":[{"type":"GIT","events":[{"introduced":"0"},{"fixed":"f016f0680e4ace6742b03a70cb0382ce86abe371"}]},{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.8.0"}]}],"versions":["0.1","0.10.0","0.10.1","0.10.2","0.11.0","0.12.0","0.13.0","0.13.1","0.14.0","0.14.1","0.14.2","0.14.3","0.14.4","0.15.0","0.15.1","0.15.2","0.15.3","0.16.0","0.16.1","0.16.2","0.16.3","0.16.4","0.16.5","0.16.6","0.17.0","0.17.1","0.17.2","0.17.3","0.17.4","0.18.0","0.18.1","0.18.2","0.18.3","0.18.4","0.19.0","0.2","0.20.0","0.20.1","0.20.2","0.21.0","0.21.1","0.21.2","0.21.4","0.21.5","0.21.6","0.22.0","0.22.0a0","0.22.0b0","0.22.0b1","0.22.0b2","0.22.0b3","0.22.0b4","0.22.0b5","0.22.0b6","0.22.1","0.22.2","0.22.3","0.22.4","0.22.5","0.3","0.4","0.4.1","0.4.2","0.4.3","0.4.4","0.5.0","0.6.0","0.6.1","0.6.2","0.6.3","0.6.4","0.6.5","0.7.0","0.7.1","0.7.2","0.7.3","0.8.0","0.8.1","0.8.2","0.8.3","0.8.4","0.9.0","0.9.1","0.9.2","0.9.3","1.0.0","1.0.1","1.0.2","1.0.3","1.0.5","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.2.0","1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","2.0.0","2.0.0rc1","2.0.1","2.0.2","2.0.3","2.0.4","2.0.5","2.0.6","2.0.7","2.1.0","2.2.0","2.2.1","2.2.2","2.2.3","2.2.4","2.2.5","2.3.0","2.3.0a1","2.3.0a2","2.3.0a3","2.3.0a4","2.3.1","2.3.10","2.3.1a1","2.3.2","2.3.2b2","2.3.2b3","2.3.3","2.3.4","2.3.5","2.3.6","2.3.7","2.3.8","2.3.9","3.0.0","3.0.0b0","3.0.0b1","3.0.0b2","3.0.0b3","3.0.0b4","3.0.1","3.0.2","3.0.3","3.0.4","3.0.5","3.0.6","3.0.7","3.0.8","3.0.9","3.1.0","3.1.1","3.1.2","3.1.3","3.2.0","3.2.1","3.3.0","3.3.0a0","3.3.1","3.3.2","3.3.2a0","3.4.0","3.4.0a0","3.4.0a3","3.4.0b1","3.4.0b2","3.4.1","3.4.2","3.4.3","3.4.4","3.5.0","3.5.0a1","3.5.0b1","3.5.0b2","3.5.0b3","3.5.1","3.5.2","3.5.3","3.5.4","3.6.0","3.6.0a0","3.6.0a1","3.6.0a11","3.6.0a12","3.6.0a2","3.6.0a3","3.6.0a4","3.6.0a5","3.6.0a6","3.6.0a7","3.6.0a8","3.6.0a9","3.6.0b0","3.6.1","3.6.1b3","3.6.1b4","3.6.2","3.6.2a0","3.6.2a1","3.6.2a2","3.6.3","3.7.0","3.7.0b0","3.7.0b1","3.7.1","3.7.2","3.7.3","3.7.4","3.7.4.post0","3.8.0a7","3.8.0b0"]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP1","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.6.0-150100.3.12.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP2","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.6.0-150100.3.12.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP3","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.6.0-150100.3.12.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP4","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.6.0-150100.3.12.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Public Cloud 15 SP5","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.6.0-150100.3.12.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Leap 15.4","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.6.0-150100.3.12.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Leap 15.5","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.6.0-150100.3.12.1"}]}]},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Module for Python 3 15 SP5","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.3-150400.10.14.1"}]}],"bundled":4},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.3-150400.10.14.1"}]}],"bundled":4},{"source":"osv","ecosystem":"SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.3-150400.10.14.1"}]}],"bundled":4},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server 15 SP4-LTSS","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.3-150400.10.14.1"}]}],"bundled":4},{"source":"osv","ecosystem":"SUSE:Linux Enterprise Server for SAP Applications 15 SP4","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.3-150400.10.14.1"}]}],"bundled":4},{"source":"osv","ecosystem":"openSUSE:Leap 15.5","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.3-150400.10.14.1"}]}],"bundled":4},{"source":"osv","ecosystem":"Ubuntu:Pro:16.04:LTS","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["0.17.2-1","0.17.4-1","0.17.4-1build1","0.20.2-1","0.20.2-1ubuntu0.1~esm1"]},{"source":"osv","ecosystem":"Ubuntu:Pro:18.04:LTS","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.2.3-1build1","2.2.3-2","2.3.6-1","3.0.1-1","3.0.1-1ubuntu0.1~esm1","3.0.1-1ubuntu0.1~esm4","3.0.1-1ubuntu0.1~esm5","3.0.1-1ubuntu0.1~esm6","3.0.1-1ubuntu0.1~esm7"]},{"source":"osv","ecosystem":"Ubuntu:Pro:20.04:LTS","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["3.5.4-1","3.5.4-1build1","3.6.1-1","3.6.2-1","3.6.2-1build1","3.6.2-1ubuntu0.1~esm1","3.6.2-1ubuntu1","3.6.2-1ubuntu1+esm1","3.6.2-1ubuntu1+esm3","3.6.2-1ubuntu1+esm4","3.6.2-1ubuntu1+esm5","3.6.2-1ubuntu1+esm6"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.9.3-2.1"}]}],"bundled":2},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"python-aiohttp","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"3.14.3-1.1"}]}],"bundled":10}],"products":[{"vendor":"aio-libs","product":"aiohttp"},{"vendor":"aiohttp","product":"aiohttp"}],"references":[{"url":"https://github.com/aio-libs/aiohttp/security/advisories/GHSA-xx9p-xxvh-7g8j","tags":["x_refsource_CONFIRM","x_transferred","Exploit","Patch","Vendor Advisory","advisory","web","report"]},{"url":"https://github.com/aio-libs/aiohttp/commit/f016f0680e4ace6742b03a70cb0382ce86abe371","tags":["x_refsource_MISC","x_transferred","Patch","fix","web","report"]},{"url":"https://lists.debian.org/debian-lts-announce/2025/02/msg00002.html","tags":["web"]},{"url":"https://github.com/aio-libs/aiohttp/releases/tag/v3.8.0","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2023-47641","tags":["web","advisory"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/aiohttp/PYSEC-2023-247.yaml","tags":["web"]},{"url":"https://github.com/advisories/GHSA-xx9p-xxvh-7g8j"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/47xxx/CVE-2023-47641.json","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2023-47641","tags":["advisory"]},{"url":"https://github.com/aio-libs/aiohttp","tags":["package"]},{"url":"https://www.openeuler.org/en/security/safety-bulletin/detail.html?id=openEuler-SA-2023-1854","tags":["advisory"]},{"url":"https://www.suse.com/support/update/announcement/2023/suse-su-20234909-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1217174","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2023-47641","tags":["web"]},{"url":"https://www.suse.com/support/update/announcement/2024/suse-su-20240577-1/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1217181","tags":["report"]},{"url":"https://bugzilla.suse.com/1217782","tags":["report"]},{"url":"https://bugzilla.suse.com/1219341","tags":["report"]},{"url":"https://bugzilla.suse.com/1219342","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2023-47627","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-23334","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-23829","tags":["web"]},{"url":"https://ubuntu.com/security/CVE-2023-47641","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2023-47641","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2023-49081","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2021-21330","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-27306","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2024-42367","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-59881","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-69243","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-69244","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2023-47641","title":"Inconsistent interpretation of `Content-Length` vs. `Transfer-Encoding` in aiohttp","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T20:44:08.989Z","modified":"2025-11-03T20:36:08.2Z","cvss":[{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low","assessor":"cna"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T14:35:14.298866Z"}],"euvd":[{"id":"EUVD-2023-0005","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T20:44:08Z","modified":"2025-11-03T20:36:08Z","cvss":[{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low"}],"updated_at":"2026-11-02T19:49:32.503916Z"}],"ghsa":[{"id":"GHSA-xx9p-xxvh-7g8j","title":"Aiohttp has inconsistent interpretation of `Content-Length` vs. `Transfer-Encoding` differing in C and Python fallbacks","description":"### Impact\n\nAiohttp has a security vulnerability regarding the inconsistent interpretation of the http protocol. As we know that HTTP/1.1 is persistent, if we have both Content-Length(CL) and Transfer-Encoding(TE) it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation.\n\nA possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. I can give a Dockerfile with the configuration if you want.\n\nThe impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect (just like CVE-2021-21330) we can combine it to redirect random users to our website and log the request.\n\n\n### References\n\n- https://github.com/aio-libs/aiohttp/commit/f016f0680e4ace6742b03a70cb0382ce86abe371","status":"published","published":"2023-11-14T20:36:25Z","modified":"2025-11-03T22:31:38Z","cvss":[{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N","level":"low"},{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T14:39:05.278442Z"}],"nvd":[{"id":"CVE-2023-47641","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T21:15:13.713Z","modified":"2026-06-17T06:33:02.03Z","cvss":[{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low","assessor":"secondary"},{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T14:08:46.647045Z"}],"osv":[{"id":"AZL-43519","title":"CVE-2023-47641 affecting package python-aiohttp 3.6.2-3","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T21:15:13Z","modified":"2026-04-21T04:31:02.281798Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:28:05.284713Z"},{"id":"AZL-44538","title":"CVE-2023-47641 affecting package python-aiohttp 3.6.2-3","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T21:15:13Z","modified":"2026-11-05T05:36:30Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-05T16:41:20.107976Z"},{"id":"CVE-2023-47641","title":"Inconsistent interpretation of `Content-Length` vs. `Transfer-Encoding` in aiohttp","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T20:44:08.989Z","modified":"2026-10-28T02:31:14.650494081Z","cvss":[{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T15:44:34.72355Z"},{"id":"DEBIAN-CVE-2023-47641","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T21:15:13.713Z","modified":"2026-10-26T18:02:58.563724215Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:45:40.275853Z"},{"id":"GHSA-xx9p-xxvh-7g8j","title":"Aiohttp has inconsistent interpretation of `Content-Length` vs. `Transfer-Encoding` differing in C and Python fallbacks","description":"### Impact\n\nAiohttp has a security vulnerability regarding the inconsistent interpretation of the http protocol. As we know that HTTP/1.1 is persistent, if we have both Content-Length(CL) and Transfer-Encoding(TE) it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation.\n\nA possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. I can give a Dockerfile with the configuration if you want.\n\nThe impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect (just like CVE-2021-21330) we can combine it to redirect random users to our website and log the request.\n\n\n### References\n\n- https://github.com/aio-libs/aiohttp/commit/f016f0680e4ace6742b03a70cb0382ce86abe371","status":"published","published":"2023-11-14T20:36:25Z","modified":"2025-11-03T22:48:44.279957Z","cvss":[{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low"},{"version":"4.0","score":2.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:L/VI:N/VA:N/SC:L/SI:N/SA:N","level":"low"}],"cwes":["CWE-444"],"updated_at":"2026-11-02T15:47:00.604718Z"},{"id":"OESA-2023-1854","title":"python-aiohttp security update","description":"Async http client/server framework (asyncio).\r\n\r\nSecurity Fix(es):\r\n\r\naiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.(CVE-2023-47641)","status":"published","published":"2023-11-24T11:06:18Z","modified":"2026-08-18T01:18:03.867549788Z","cvss":[{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low"}],"updated_at":"2026-11-02T15:52:40.71472Z"},{"id":"PYSEC-2023-247","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T21:15:00Z","modified":"2023-11-22T23:41:23.846045Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:52:53.837392Z"},{"id":"UBUNTU-CVE-2023-47641","description":"aiohttp is an asynchronous HTTP client/server framework for asyncio and Python. Affected versions of aiohttp have a security vulnerability regarding the inconsistent interpretation of the http protocol. HTTP/1.1 is a persistent protocol, if both Content-Length(CL) and Transfer-Encoding(TE) header values are present it can lead to incorrect interpretation of two entities that parse the HTTP and we can poison other sockets with this incorrect interpretation. A possible Proof-of-Concept (POC) would be a configuration with a reverse proxy(frontend) that accepts both CL and TE headers and aiohttp as backend. As aiohttp parses anything with chunked, we can pass a chunked123 as TE, the frontend entity will ignore this header and will parse Content-Length. The impact of this vulnerability is that it is possible to bypass any proxy rule, poisoning sockets to other users like passing Authentication Headers, also if it is present an Open Redirect an attacker could combine it to redirect random users to another website and log the request. This vulnerability has been addressed in release 3.8.0 of aiohttp. Users are advised to upgrade. There are no known workarounds for this vulnerability.","status":"published","published":"2023-11-14T21:15:00Z","modified":"2026-07-23T01:15:15.202286639Z","cvss":[{"version":"3.1","score":3.4,"vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:L/I:N/A:N","level":"low"},{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T16:54:23.935133Z"},{"id":"DLA-4041-1","title":"python-aiohttp - security update","status":"published","published":"2025-02-03T00:00:00Z","modified":"2026-03-09T01:20:42.144661Z","updated_at":"2026-11-02T15:46:12.203458Z"},{"id":"openSUSE-SU-2024:13691-1","title":"python310-aiohttp-3.9.3-2.1 on GA media","description":"These are all security issues fixed in the python310-aiohttp-3.9.3-2.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2024-06-15T00:00:00Z","modified":"2026-02-04T03:06:10.819267Z","updated_at":"2026-11-02T16:58:36.327643Z"},{"id":"openSUSE-SU-2026:11467-1","title":"python313-aiohttp-3.14.3-1.1 on GA media","description":"These are all security issues fixed in the python313-aiohttp-3.14.3-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-08-06T00:00:00Z","modified":"2026-08-07T10:00:44.119328568Z","updated_at":"2026-11-02T16:58:39.516824Z"},{"id":"SUSE-SU-2023:4909-1","title":"Security update for python-aiohttp","description":"This update for python-aiohttp fixes the following issues:\n\n- CVE-2023-47641: Fixed inconsistent interpretation of the http protocol, if \n      content-length and transport-encoding are in the same header with\n      transport-encoding value of 'chunked*' (bsc#1217174)\n","status":"published","published":"2023-12-19T15:01:47Z","modified":"2026-02-04T03:53:43.600834Z","updated_at":"2026-11-02T15:53:53.865042Z"},{"id":"SUSE-SU-2024:0577-1","title":"Security update for python-aiohttp, python-time-machine","description":"This update for python-aiohttp, python-time-machine fixes the following issues:\n\npython-aiohttp was updated to version 3.9.3:\n\n* Fixed backwards compatibility breakage (in 3.9.2) of ``ssl`` parameter\n  when set outside of ``ClientSession`` (e.g. directly in ``TCPConnector``)\n* Improved test suite handling of paths and temp files to consistently\n  use pathlib and pytest fixtures.\n\nFrom version 3.9.2 (bsc#1219341, CVE-2024-23334, bsc#1219342, CVE-2024-23829):\n\n* Fixed server-side websocket connection leak.\n* Fixed ``web.FileResponse`` doing blocking I/O in the event loop.\n* Fixed double compress when compression enabled and compressed file\n  exists in server file responses.\n* Added runtime type check for ``ClientSession`` ``timeout`` parameter.\n* Fixed an unhandled exception in the Python HTTP parser on header lines\n  starting with a colon.\n* Improved validation of paths for static resources requests to the server.\n* Added support for passing :py:data:`True` to ``ssl`` parameter in\n  ``ClientSession`` while deprecating :py:data:`None`.\n* Fixed an unhandled exception in the Python HTTP parser on header lines\n  starting with a colon.\n* Fixed examples of ``fallback_charset_resolver`` function in the\n  :doc:`client_advanced` document.\n* The Sphinx setup was updated to avoid showing the empty\n  changelog draft section in the tagged release documentation\n  builds on Read The Docs.\n* The changelog categorization was made clearer. The contributors can\n  now mark their fragment files more accurately.\n* Updated :ref:`contributing/Tests coverage \u003caiohttp-contributing\u003e`\n  section to show how we use ``codecov``.\n* Replaced all ``tmpdir`` fixtures with ``tmp_path`` in test suite.\n\n- Disable broken tests with openssl 3.2 and python \u003c 3.11 bsc#1217782\n\nupdate to 3.9.1:\n\n* Fixed importing aiohttp under PyPy on Windows.\n* Fixed async concurrency safety in websocket compressor.\n* Fixed ``ClientResponse.close()`` releasing the connection\n  instead of closing.\n* Fixed a regression where connection may get closed during\n  upgrade. -- by :user:`Dreamsorcerer`\n* Fixed messages being reported as upgraded without an Upgrade\n  header in Python parser. -- by :user:`Dreamsorcerer`\n\nupdate to 3.9.0: (bsc#1217684, CVE-2023-49081, bsc#1217682, CVE-2023-49082)\n\n* Introduced ``AppKey`` for static typing support of\n  ``Application`` storage.\n* Added a graceful shutdown period which allows pending tasks\n  to complete before the application's cleanup is called.\n* Added `handler_cancellation`_ parameter to cancel web handler on\n  client disconnection.\n* This (optionally) reintroduces a feature removed in a\n  previous release.\n* Recommended for those looking for an extra level of\n  protection against denial-of-service attacks.\n* Added support for setting response header parameters\n  ``max_line_size`` and ``max_field_size``.\n* Added ``auto_decompress`` parameter to\n  ``ClientSession.request`` to override\n  ``ClientSession._auto_decompress``.\n* Changed ``raise_for_status`` to allow a coroutine.\n* Added client brotli compression support (optional with\n  runtime check).\n* Added ``client_max_size`` to ``BaseRequest.clone()`` to allow\n  overriding the request body size. -- :user:`anesabml`.\n* Added a middleware type alias\n  ``aiohttp.typedefs.Middleware``.\n* Exported ``HTTPMove`` which can be used to catch any\n  redirection request that has a location -- :user:`dreamsorcerer`.\n* Changed the ``path`` parameter in ``web.run_app()`` to accept\n  a ``pathlib.Path`` object.\n* Performance: Skipped filtering ``CookieJar`` when the jar is\n  empty or all cookies have expired.\n* Performance: Only check origin if insecure scheme and there\n  are origins to treat as secure, in\n  ``CookieJar.filter_cookies()``.\n* Performance: Used timestamp instead of ``datetime`` to\n  achieve faster cookie expiration in ``CookieJar``.\n* Added support for passing a custom server name parameter to\n  HTTPS connection.\n* Added support for using Basic Auth credentials from\n  :file:`.netrc` file when making HTTP requests with the\n* :py:class:`~aiohttp.ClientSession` ``trust_env`` argument is\n  set to ``True``. -- by :user:`yuvipanda`.\n* Turned access log into no-op when the logger is disabled.\n* Added typing information to ``RawResponseMessage``. -- by\n  :user:`Gobot1234`\n* Removed ``async-timeout`` for Python 3.11+ (replaced with\n  ``asyncio.timeout()`` on newer releases).\n* Added support for ``brotlicffi`` as an alternative to\n  ``brotli`` (fixing Brotli support on PyPy).\n* Added ``WebSocketResponse.get_extra_info()`` to access a\n  protocol transport's extra info.\n* Allow ``link`` argument to be set to None/empty in HTTP 451\n  exception.\n* Fixed client timeout not working when incoming data is always\n  available without waiting. -- by :user:`Dreamsorcerer`.\n* Fixed ``readuntil`` to work with a delimiter of more than one\n  character.\n* Added ``__repr__`` to ``EmptyStreamReader`` to avoid\n  ``AttributeError``.\n* Fixed bug when using ``TCPConnector`` with\n  ``ttl_dns_cache=0``.\n* Fixed response returned from expect handler being thrown\n  away. -- by :user:`Dreamsorcerer`\n* Avoided raising ``UnicodeDecodeError`` in multipart and in\n  HTTP headers parsing.\n* Changed ``sock_read`` timeout to start after writing has\n  finished, avoiding read timeouts caused by an unfinished\n  write. -- by :user:`dtrifiro`\n* Fixed missing query in tracing method URLs when using\n  ``yarl`` 1.9+.\n* Changed max 32-bit timestamp to an aware datetime object, for\n  consistency with the non-32-bit one, and to avoid a\n  ``DeprecationWarning`` on Python 3.12.\n* Fixed ``EmptyStreamReader.iter_chunks()`` never ending.\n* Fixed a rare ``RuntimeError: await wasn't used with future``\n  exception.\n* Fixed issue with insufficient HTTP method and version\n  validation.\n* Added check to validate that absolute URIs have schemes.\n* Fixed unhandled exception when Python HTTP parser encounters\n  unpaired Unicode surrogates.\n* Updated parser to disallow invalid characters in header field\n  names and stop accepting LF as a request line separator.\n* Fixed Python HTTP parser not treating 204/304/1xx as an empty\n  body.\n* Ensure empty body response for 1xx/204/304 per RFC 9112 sec\n  6.3.\n* Fixed an issue when a client request is closed before\n  completing a chunked payload. -- by :user:`Dreamsorcerer`\n* Edge Case Handling for ResponseParser for missing reason\n  value.\n* Fixed ``ClientWebSocketResponse.close_code`` being\n  erroneously set to ``None`` when there are concurrent async\n  tasks receiving data and closing the connection.\n* Added HTTP method validation.\n* Fixed arbitrary sequence types being allowed to inject values\n  via version parameter. -- by :user:`Dreamsorcerer`\n* Performance: Fixed increase in latency with small messages\n  from websocket compression changes.\n* Improved Documentation\n* Fixed the `ClientResponse.release`'s type in the doc. Changed\n  from `comethod` to `method`.\n* Added information on behavior of base_url parameter in\n  `ClientSession`.\n* Completed ``trust_env`` parameter description to honor\n  ``wss_proxy``, ``ws_proxy`` or ``no_proxy`` env.\n* Dropped Python 3.6 support.\n* Dropped Python 3.7 support. -- by :user:`Dreamsorcerer`\n* Removed support for abandoned ``tokio`` event loop.\n* Made ``print`` argument in ``run_app()`` optional.\n* Improved performance of ``ceil_timeout`` in some cases.\n* Changed importing Gunicorn to happen on-demand, decreasing\n  import time by ~53%. -- :user:`Dreamsorcerer`\n* Improved import time by replacing ``http.server`` with\n  ``http.HTTPStatus``.\n* Fixed annotation of ``ssl`` parameter to disallow ``True``.\n\nupdate to 3.8.6 (bsc#1217181, CVE-2023-47627):\n\n* Security bugfixes\n* https://github.com/aio-libs/aiohttp/security/advisories/GHSA-\n  pjjw-qhg8-p2p9.\n* https://github.com/aio-libs/aiohttp/security/advisories/GHSA-\n  gfw2-4jvh-wgfg.\n* Added ``fallback_charset_resolver`` parameter in\n  ``ClientSession`` to allow a user-supplied\n  character set detection function.\n  Character set detection will no longer be included in 3.9 as\n  a default. If this feature is needed,\n  please use `fallback_charset_resolver\n  the client\n* Fixed ``PermissionError`` when ``.netrc`` is unreadable due\n  to permissions.\n* Fixed output of parsing errors\n* Fixed sorting in ``filter_cookies`` to use cookie with\n  longest path.\n\nRelease 3.8.0 (2021-10-31) (bsc#1217174, CVE-2023-47641)\n","status":"published","published":"2024-02-21T10:43:49Z","modified":"2026-02-04T04:09:07.337359Z","updated_at":"2026-11-02T15:53:54.239786Z"}]}}
