{"id":"GHSA-h4cc-hm5h-fmm9","kind":"vulnerability","aliases":["GHSA-h4cc-hm5h-fmm9"],"related":[],"title":"Concatenated compressed streams cause excessive CPU use","description":"### Summary\r\n\r\nWhen decompressing a payload made up of many concatenated compressed members (gzip, deflate or zstd), each member was decoded by passing the entire remaining input to a new decompressor, resulting in quadratic CPU time. Empty members produce no output, so `client_max_size` and output backpressure did not limit the work.\r\n\r\n### Impact\r\n\r\nAn attacker could block the event loop of a server with a specially crafted compressed request body or WebSocket message. A malicious server could do the same to a client.\r\n\r\n---\r\n\r\nPatch: https://github.com/aio-libs/aiohttp/commit/d925a80539ffd227da1d93ab4a5bff123cc777db","summary":"aiohttp decompresses each concatenated gzip, deflate or zstd member by handing the whole remaining input to a new decompressor, which makes CPU time quadratic. An attacker can send a crafted compressed request body or WebSocket message to block a server's event loop, and a malicious server can do the same to a client.","severity":"low","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-407","http-client","package","python","web-server"],"not_affected_if":["no-untrusted-compressed-input"],"how_to_check":"- Check the installed aiohttp version with `pip show aiohttp` and compare it to the affected range `<= 3.14.3`.\n- Search the project's dependency lockfiles for `aiohttp` pinned at or below `3.14.3`.","fix":"- Upgrade `aiohttp` to `3.14.4`.","status":"open","published_at":"2026-11-08T18:15:40+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.8,"triage":{"at":"2026-11-09T22:58:39Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade `aiohttp` to `3.14.4`.","reach":"network","title":"aiohttp: concatenated compressed streams cause quadratic CPU use, blocking the event loop","impact":"low","summary":"aiohttp decompresses each concatenated gzip, deflate or zstd member by handing the whole remaining input to a new decompressor, which makes CPU time quadratic. An attacker can send a crafted compressed request body or WebSocket message to block a server's event loop, and a malicious server can do the same to a client.","audience":"developers","category":"package","nicknames":[],"who_cares":["python","aiohttp","web-server","http-client"],"confidence":0.8,"fix_status":"available","needs_auth":"no","worst_case":"Event loop blocked by crafted compressed payload, causing denial of service","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- Search the project's dependency lockfiles for `aiohttp` pinned at or below `3.14.3`.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["no-untrusted-compressed-input"],"who_is_affected":"Any application that uses aiohttp as an HTTP server or client and accepts compressed request bodies or WebSocket messages from untrusted parties is exposed. A malicious server can also affect aiohttp clients that read its compressed responses. Applications that do not accept or process compressed input from untrusted sources can skip it.","user_interaction":"no","product_ecosystem":"","needs_special_setup":"unknown","severity_if_unknown":"low"},"cost_usd":0.000765,"input_tokens":4729,"output_tokens":584,"severity_before":"low"},"analyst_status":null,"analyst_note":null,"search":"'-400':21B '-407':23B '/aio-libs/aiohttp/commit/d925a80539ffd227da1d93ab4a5bff123cc777db':172C 'aiohttp':18A,19B,32B 'attack':57B,140C 'backpressur':132C 'block':69B,142C 'bodi':64B,155C 'caus':4A 'client':26B,85B,127C,168C 'compress':2A,62B,96C,153C 'concaten':1A,35B,95C 'could':141C,162C 'cpu':6A,53B,119C 'craft':61B,152C 'cwe':20B,22B 'decod':105C 'decompress':33B,88C 'decompressor':50B,115C 'deflat':37B,99C 'empti':121C 'entir':109C 'event':73B,144C 'excess':5A 'fmm9':12A,17A 'ghsa':9A,14A 'ghsa-h4cc-hm5h-fmm9':8A,13A 'github.com':171C 'github.com/aio-libs/aiohttp/commit/d925a80539ffd227da1d93ab4a5bff123cc777db':170C 'gzip':36B,98C 'h4cc':10A,15A 'hand':42B 'hm5h':11A,16A 'http':25B 'http-client':24B 'impact':138C 'input':46B,111C 'limit':135C 'loop':74B,145C 'made':91C 'make':52B 'malici':77B,160C 'mani':94C 'max':128C 'member':40B,97C,103C,122C 'messag':67B,158C 'new':49B,114C 'output':125C,131C 'packag':27B 'pass':107C 'patch':169C 'payload':90C 'produc':123C 'python':28B 'quadrat':55B,118C 'remain':45B,110C 'request':63B,154C 'result':116C 'send':59B 'server':31B,71B,78B,148C,161C 'size':129C 'special':151C 'stream':3A 'summari':86C 'time':54B,120C 'use':7A 'web':30B 'web-serv':29B 'websocket':66B,157C 'whole':44B 'work':137C 'zstd':39B,101C","nicknames":[],"mitigations":[],"who_affected":"Any application that uses aiohttp as an HTTP server or client and accepts compressed request bodies or WebSocket messages from untrusted parties is exposed. A malicious server can also affect aiohttp clients that read its compressed responses. Applications that do not accept or process compressed input from untrusted sources can skip it.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"pkeys":["aiohttp"],"ptokens":["aiohttp"],"labels":["aiohttp","cwe400","cwe407","httpclient","low","package","pypi","python","webserver"],"campaign_type":null,"search_a":"'aiohttp':18A 'caus':4A 'compress':2A 'concaten':1A 'cpu':6A 'excess':5A 'fmm9':12A,17A 'ghsa':9A,14A 'ghsa-h4cc-hm5h-fmm9':8A,13A 'h4cc':10A,15A 'hm5h':11A,16A 'stream':3A 'use':7A","search_b":"'-400':21B '-407':23B 'aiohttp':19B,32B 'attack':57B 'block':69B 'bodi':64B 'client':26B,85B 'compress':62B 'concaten':35B 'cpu':53B 'craft':61B 'cwe':20B,22B 'decompress':33B 'decompressor':50B 'deflat':37B 'event':73B 'gzip':36B 'hand':42B 'http':25B 'http-client':24B 'input':46B 'loop':74B 'make':52B 'malici':77B 'member':40B 'messag':67B 'new':49B 'packag':27B 'python':28B 'quadrat':55B 'remain':45B 'request':63B 'send':59B 'server':31B,71B,78B 'time':54B 'web':30B 'web-serv':29B 'websocket':66B 'whole':44B 'zstd':39B","search_c":"'/aio-libs/aiohttp/commit/d925a80539ffd227da1d93ab4a5bff123cc777db':172C 'attack':140C 'backpressur':132C 'block':142C 'bodi':155C 'client':127C,168C 'compress':96C,153C 'concaten':95C 'could':141C,162C 'cpu':119C 'craft':152C 'decod':105C 'decompress':88C 'decompressor':115C 'deflat':99C 'empti':121C 'entir':109C 'event':144C 'github.com':171C 'github.com/aio-libs/aiohttp/commit/d925a80539ffd227da1d93ab4a5bff123cc777db':170C 'gzip':98C 'impact':138C 'input':111C 'limit':135C 'loop':145C 'made':91C 'malici':160C 'mani':94C 'max':128C 'member':97C,103C,122C 'messag':158C 'new':114C 'output':125C,131C 'pass':107C 'patch':169C 'payload':90C 'produc':123C 'quadrat':118C 'remain':110C 'request':154C 'result':116C 'server':148C,161C 'size':129C 'special':151C 'summari':86C 'time':120C 'websocket':157C 'work':137C 'zstd':101C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-08T18:15:40+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"ghsa-repo","external_id":"GHSA-h4cc-hm5h-fmm9","url":"https://github.com/aio-libs/aiohttp/security/advisories/GHSA-h4cc-hm5h-fmm9","severity":"low","published_at":"2026-11-08T18:15:40+00:00","modified_at":"2026-11-08T18:33:29+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":110556,"url":"https://github.com/aio-libs/aiohttp/security/advisories/GHSA-h4cc-hm5h-fmm9","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"}