{"id":"GHSA-5rmc-48h2-hvcm","kind":"vulnerability","aliases":["GHSA-5rmc-48h2-hvcm"],"related":[],"title":"WebSocket receive queue limits bypassed by small or compressed messages","description":"### Summary\r\n\r\nThe WebSocket reader continued parsing frames already received after the receive queue had paused the transport, and empty messages were not counted towards the queue size. With permessage-deflate, a single read of compressed frames could add many megabytes of decompressed messages to the queue.\r\n\r\n### Impact\r\n\r\nAn attacker could cause excessive memory use in a WebSocket server, or a malicious server against a client, by sending many small or compressed messages faster than the application consumes them.\r\n\r\n---\r\n\r\nPatch: https://github.com/aio-libs/aiohttp/commit/0ae507423f681161efa77d20052b4054397c7fb6","summary":"aiohttp's WebSocket reader keeps parsing frames after its receive queue has paused, and empty or compressed messages do not count toward the queue size. An attacker can send many small or compressed messages to make a WebSocket server or client use excessive memory.","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-400","cwe-770","package","python","websocket"],"not_affected_if":["no-websocket-use","trusted-peers-only"],"how_to_check":"- Check the installed aiohttp version with `pip show aiohttp` and compare it to the affected range `<= 3.14.3`.\n- Look for WebSocket endpoints built on aiohttp that accept messages from untrusted peers, with permessage-deflate enabled.","fix":"- `aiohttp` `3.14.4`","status":"open","published_at":"2026-11-08T18:14:02+00:00","first_seen_at":"2026-11-09T22:53:22+00:00","triaged_at":"2026-11-09T22:58:39+00:00","updated_at":"2026-11-09T22:58:39+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-11-09T22:58:39Z","model":"claude-haiku-5-5","output":{"fix":"- `aiohttp` `3.14.4`","reach":"network","title":"aiohttp: WebSocket queue limits can be bypassed, exhausting server memory","impact":"medium","summary":"aiohttp's WebSocket reader keeps parsing frames after its receive queue has paused, and empty or compressed messages do not count toward the queue size. An attacker can send many small or compressed messages to make a WebSocket server or client use excessive memory.","audience":"developers","category":"package","nicknames":[],"who_cares":["aiohttp","python","websocket"],"confidence":0.7,"fix_status":"available","needs_auth":"unknown","worst_case":"Excessive memory use causes the process to exhaust memory or slow down","analyst_note":"","how_to_check":"- Check the installed aiohttp version with `pip show aiohttp` and compare it to the affected range `<= 3.14.3`.\n- Look for WebSocket endpoints built on aiohttp that accept messages from untrusted peers, with permessage-deflate enabled.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["no-websocket-use","trusted-peers-only"],"who_is_affected":"Applications using aiohttp WebSockets (server or client) that receive messages from untrusted peers. Applications that do not use WebSockets, or only talk to trusted peers, are less exposed.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"medium"},"cost_usd":0.000735,"input_tokens":4719,"output_tokens":526,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-400':24B '-770':26B '/aio-libs/aiohttp/commit/0ae507423f681161efa77d20052b4054397c7fb6':156C '48h2':14A,19A '5rmc':13A,18A 'add':112C 'aiohttp':21A,22B,30B 'alreadi':81C 'applic':150C 'attack':56B,123C 'bypass':5A 'caus':125C 'client':70B,139C 'compress':9A,46B,62B,109C,145C 'consum':151C 'continu':78C 'could':111C,124C 'count':50B,96C 'cwe':23B,25B 'decompress':116C 'deflat':104C 'empti':44B,92C 'excess':72B,126C 'faster':147C 'frame':36B,80C,110C 'ghsa':12A,17A 'ghsa-5rmc-48h2-hvcm':11A,16A 'github.com':155C 'github.com/aio-libs/aiohttp/commit/0ae507423f681161efa77d20052b4054397c7fb6':154C 'hvcm':15A,20A 'impact':121C 'keep':34B 'limit':4A 'make':65B 'malici':135C 'mani':59B,113C,142C 'megabyt':114C 'memori':73B,127C 'messag':10A,47B,63B,93C,117C,146C 'packag':27B 'pars':35B,79C 'patch':153C 'paus':42B,88C 'permessag':103C 'permessage-defl':102C 'python':28B 'queue':3A,40B,53B,86C,99C,120C 'read':107C 'reader':33B,77C 'receiv':2A,39B,82C,85C 'send':58B,141C 'server':68B,132C,136C 'singl':106C 'size':54B,100C 'small':7A,60B,143C 'summari':74C 'toward':51B,97C 'transport':90C 'use':71B,128C 'websocket':1A,29B,32B,67B,76C,131C","nicknames":[],"mitigations":[],"who_affected":"Applications using aiohttp WebSockets (server or client) that receive messages from untrusted peers. Applications that do not use WebSockets, or only talk to trusted peers, are less exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["aiohttp"],"ptokens":["aiohttp"],"labels":["aiohttp","cwe400","cwe770","medium","package","pypi","python","websocket"],"campaign_type":null,"search_a":"'48h2':14A,19A '5rmc':13A,18A 'aiohttp':21A 'bypass':5A 'compress':9A 'ghsa':12A,17A 'ghsa-5rmc-48h2-hvcm':11A,16A 'hvcm':15A,20A 'limit':4A 'messag':10A 'queue':3A 'receiv':2A 'small':7A 'websocket':1A","search_b":"'-400':24B '-770':26B 'aiohttp':22B,30B 'attack':56B 'client':70B 'compress':46B,62B 'count':50B 'cwe':23B,25B 'empti':44B 'excess':72B 'frame':36B 'keep':34B 'make':65B 'mani':59B 'memori':73B 'messag':47B,63B 'packag':27B 'pars':35B 'paus':42B 'python':28B 'queue':40B,53B 'reader':33B 'receiv':39B 'send':58B 'server':68B 'size':54B 'small':60B 'toward':51B 'use':71B 'websocket':29B,32B,67B","search_c":"'/aio-libs/aiohttp/commit/0ae507423f681161efa77d20052b4054397c7fb6':156C 'add':112C 'alreadi':81C 'applic':150C 'attack':123C 'caus':125C 'client':139C 'compress':109C,145C 'consum':151C 'continu':78C 'could':111C,124C 'count':96C 'decompress':116C 'deflat':104C 'empti':92C 'excess':126C 'faster':147C 'frame':80C,110C 'github.com':155C 'github.com/aio-libs/aiohttp/commit/0ae507423f681161efa77d20052b4054397c7fb6':154C 'impact':121C 'malici':135C 'mani':113C,142C 'megabyt':114C 'memori':127C 'messag':93C,117C,146C 'pars':79C 'patch':153C 'paus':88C 'permessag':103C 'permessage-defl':102C 'queue':86C,99C,120C 'read':107C 'reader':77C 'receiv':82C,85C 'send':141C 'server':132C,136C 'singl':106C 'size':100C 'small':143C 'summari':74C 'toward':97C 'transport':90C 'use':128C 'websocket':76C,131C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-08T18:14:02+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"ghsa-repo","external_id":"GHSA-5rmc-48h2-hvcm","url":"https://github.com/aio-libs/aiohttp/security/advisories/GHSA-5rmc-48h2-hvcm","severity":"medium","published_at":"2026-11-08T18:14:02+00:00","modified_at":"2026-11-08T18:31:51+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":110557,"url":"https://github.com/aio-libs/aiohttp/security/advisories/GHSA-5rmc-48h2-hvcm","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"}