{"id":"GHSA-pw86-h8fm-j323","kind":"vulnerability","aliases":["GHSA-pw86-h8fm-j323"],"related":[],"title":"Unbounded buffering of data received during an upgrade request","description":"### Summary\r\n\r\nWhile a request flagged as an upgrade (e.g. a WebSocket handshake) was being handled, all further data received on the connection was buffered with no size limit or flow control until the handler completed.\r\n\r\n### Impact\r\n\r\nAn attacker could cause unbounded memory use by streaming data behind an upgrade request to any handler that does not immediately accept or reject the upgrade.\r\n\r\n---\r\n\r\nPatch: https://github.com/aio-libs/aiohttp/commit/3d850ee9b92573c7e913821cbcb96005beb3f4df","summary":"While a request marked as an upgrade, such as a WebSocket handshake, is being handled, aiohttp buffers all further data on the connection with no size limit until the handler finishes. An attacker who streams data behind such a request can drive the server's memory use without bound.","severity":"medium","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[{"name":"aiohttp","fixed":["3.14.4"],"affected":"<= 3.14.3","ecosystem":"pypi"}],"ecosystems":["pypi"],"tags":["aiohttp","cwe-770","package","python","self-hosted","websocket"],"not_affected_if":["client-only","no-upgrade-handlers"],"how_to_check":"- Check the installed version with `pip show aiohttp` and confirm whether it is `3.14.3` or older.\n- Look for applications that use aiohttp servers with WebSocket or other upgrade handlers that do not accept or reject the upgrade immediately.","fix":"- `aiohttp` `3.14.4`","status":"open","published_at":"2026-11-08T18:19:25+00:00","first_seen_at":"2026-11-09T22:53:22+00:00","triaged_at":"2026-11-09T22:58:36+00:00","updated_at":"2026-11-09T22:58:36+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-09T22:58:36Z","model":"claude-haiku-5-5","output":{"fix":"- `aiohttp` `3.14.4`","reach":"internet","title":"aiohttp: upgrade requests buffer unlimited data, exhausting server memory","impact":"medium","summary":"While a request marked as an upgrade, such as a WebSocket handshake, is being handled, aiohttp buffers all further data on the connection with no size limit until the handler finishes. An attacker who streams data behind such a request can drive the server's memory use without bound.","audience":"developers","category":"package","nicknames":[],"who_cares":["aiohttp","python","websocket","self-hosted"],"confidence":0.8,"fix_status":"available","needs_auth":"unknown","worst_case":"Attacker exhausts server memory by streaming data during upgrade","analyst_note":"","how_to_check":"- Check the installed version with `pip show aiohttp` and confirm whether it is `3.14.3` or older.\n- Look for applications that use aiohttp servers with WebSocket or other upgrade handlers that do not accept or reject the upgrade immediately.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["client-only","no-upgrade-handlers"],"who_is_affected":"Applications that run an aiohttp server and expose handlers reachable by clients that send upgrade requests, such as WebSocket endpoints, where the handler does not immediately accept or reject the upgrade. Client-only use of aiohttp and servers that do not serve upgrade requests are not described as affected.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.00074,"input_tokens":4677,"output_tokens":545,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-770':23B '/aio-libs/aiohttp/commit/3d850ee9b92573c7e913821cbcb96005beb3f4df':144C 'accept':136C 'aiohttp':20A,21B,45B 'attack':62B,116C 'behind':66B,125C 'bound':78B 'buffer':2A,46B,102C 'caus':118C 'complet':113C 'connect':52B,100C 'control':109C 'could':117C 'cwe':22B 'data':4A,49B,65B,96C,124C 'drive':71B 'e.g':87C 'finish':60B 'flag':83C 'flow':108C 'ghsa':11A,16A 'ghsa-pw86-h8fm-j323':10A,15A 'github.com':143C 'github.com/aio-libs/aiohttp/commit/3d850ee9b92573c7e913821cbcb96005beb3f4df':142C 'h8fm':13A,18A 'handl':44B,93C 'handler':59B,112C,131C 'handshak':41B,90C 'host':28B 'immedi':135C 'impact':114C 'j323':14A,19A 'limit':56B,106C 'mark':33B 'memori':75B,120C 'packag':24B 'patch':141C 'pw86':12A,17A 'python':25B 'receiv':5A,97C 'reject':138C 'request':9A,32B,69B,82C,128C 'self':27B 'self-host':26B 'server':73B 'size':55B,105C 'stream':64B,123C 'summari':79C 'unbound':1A,119C 'upgrad':8A,36B,86C,127C,140C 'use':76B,121C 'websocket':29B,40B,89C 'without':77B","nicknames":[],"mitigations":[],"who_affected":"Applications that run an aiohttp server and expose handlers reachable by clients that send upgrade requests, such as WebSocket endpoints, where the handler does not immediately accept or reject the upgrade. Client-only use of aiohttp and servers that do not serve upgrade requests are not described as affected.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["aiohttp"],"ptokens":["aiohttp"],"labels":["aiohttp","cwe770","medium","package","pypi","python","selfhosted","websocket"],"campaign_type":null,"search_a":"'aiohttp':20A 'buffer':2A 'data':4A 'ghsa':11A,16A 'ghsa-pw86-h8fm-j323':10A,15A 'h8fm':13A,18A 'j323':14A,19A 'pw86':12A,17A 'receiv':5A 'request':9A 'unbound':1A 'upgrad':8A","search_b":"'-770':23B 'aiohttp':21B,45B 'attack':62B 'behind':66B 'bound':78B 'buffer':46B 'connect':52B 'cwe':22B 'data':49B,65B 'drive':71B 'finish':60B 'handl':44B 'handler':59B 'handshak':41B 'host':28B 'limit':56B 'mark':33B 'memori':75B 'packag':24B 'python':25B 'request':32B,69B 'self':27B 'self-host':26B 'server':73B 'size':55B 'stream':64B 'upgrad':36B 'use':76B 'websocket':29B,40B 'without':77B","search_c":"'/aio-libs/aiohttp/commit/3d850ee9b92573c7e913821cbcb96005beb3f4df':144C 'accept':136C 'attack':116C 'behind':125C 'buffer':102C 'caus':118C 'complet':113C 'connect':100C 'control':109C 'could':117C 'data':96C,124C 'e.g':87C 'flag':83C 'flow':108C 'github.com':143C 'github.com/aio-libs/aiohttp/commit/3d850ee9b92573c7e913821cbcb96005beb3f4df':142C 'handl':93C 'handler':112C,131C 'handshak':90C 'immedi':135C 'impact':114C 'limit':106C 'memori':120C 'patch':141C 'receiv':97C 'reject':138C 'request':82C,128C 'size':105C 'stream':123C 'summari':79C 'unbound':119C 'upgrad':86C,127C,140C 'use':121C 'websocket':89C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-08T18:19:25+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"ghsa-repo","external_id":"GHSA-pw86-h8fm-j323","url":"https://github.com/aio-libs/aiohttp/security/advisories/GHSA-pw86-h8fm-j323","severity":"medium","published_at":"2026-11-08T18:19:25+00:00","modified_at":"2026-11-08T18:35:02+00:00","first_seen_at":"2026-11-09T22:53:22+00:00","fetched_at":"2026-11-09T22:53:22+00:00","note":null}],"documents":[{"id":110554,"url":"https://github.com/aio-libs/aiohttp/security/advisories/GHSA-pw86-h8fm-j323","title":"Maintainer's advisory: github.com","kind":"vendor","source":"ghsa-repo","publisher":"vendor","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Maintainer's advisory: github.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}