Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessConnect to permessage-brotli WebSocket endpoint
-
DeliverySend tiny crafted brotli frame
-
ExploitServer inflates whole frame before limit check
-
ExecutionHundreds of MiB allocated per frame
-
ImpactMemory exhaustion denial of service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Compression ratio limits
|
| Exploitation Conditions | The server must have explicitly enabled the opt-in permessage-brotli compression extension (installed via the 'compress' extra) and negotiated it with the connecting client; only Autobahn Python 26.7.1 through <26.10.1 is affected. No authentication or user interaction is required (CVSS PR:N/UI:N), so any reachable unauthenticated WebSocket client can trigger it against a default configuration of a brotli-enabled server. Limiting factors that reduce realistic risk: permessage-brotli is NOT a default - it must be deliberately enabled - and the permessage-deflate, -bzip2 and -snappy extensions already enforce the remaining output budget and are not affected; impact is availability only, with no confidentiality or integrity exposure. |
| Impact | Signals point to a genuine but bounded risk. The vendor-confirmed GHSA advisory (GHSA-pjh6-c8mg-3x7m) describes an unauthenticated memory-exhaustion DoS with CVSS:3.1/AV:N/PR:N/UI:N and A:H - network-reachable, no privileges, availability-only impact (C:N/I:N). A full, tested proof-of-concept is published in the advisory (one 421-byte frame peaks the server at 545 MiB), so triggering is trivial once the feature is reachable; this is not a theoretical bug. However, the real-world attack surface is gated by a non-default precondition: the server must have opted into permessage-brotli via the 'compress' extra, which the advisory stresses is opt-in. This explains the modest signals elsewhere - EPSS is low (0.43%, 37th percentile), the vuln is NOT in CISA KEV (no confirmed active exploitation), and the vendor priority label is 'this_month' rather than emergency. One notable tension: NVD rates AC:H, yet the published PoC shows a single small frame triggers the condition with no race, timing or attacker-uncontrolled element described - the 'complexity' is really the non-default configuration dependency, not attack difficulty. Net: a real priority for the subset of deployments that enabled permessage-brotli, lower urgency for everyone else, with no confidentiality or integrity exposure. |
| Exploit ScenarioDerived | An attacker connects to a public Autobahn Python WebSocket server that has enabled the opt-in permessage-brotli compression extension and sends a tiny (~421-byte) highly compressed brotli frame. The server's PerMessageBrotli.decompress_message_data inflates the entire frame before checking maxMessagePayloadSize, allocating hundreds of MiB per frame; a few concurrent connections exhaust server memory and cause denial of service. A working, reporter-tested proof-of-concept is published in the GHSA advisory. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Memory-exhaustion denial of service in Autobahn Python 26.7.1 through 26.10.0 (pip package autobahn) lets a remote, unauthenticated WebSocket client exhaust server memory by sending one tiny, highly compressed permessage-brotli frame; the decompressor inflates the whole frame before the configured maxMessagePayloadSize is enforced, so a 421-byte frame drove peak RSS to roughly 545 MiB under a 1 MiB message limit in the reporter's own measurement. Only servers that deliberately opt into the permessage-brotli extension (via the compress extra) are exposed - permessage-deflate, -bzip2 and -snappy already honor the output budget and are explicitly out of scope - and the impact is availability only, with no confidentiality or integrity exposure. Fixed in 26.10.1; a working proof-of-concept ships with the upstream advisory, no active exploitation is reported (EPSS 0.43%, 37th percentile), and the vuln.today priority is 'this_month' given the opt-in prerequisite.
RemediationAI
Upgrade Autobahn Python to 26.10.1 or later (release tag v26_10_1, https://github.com/crossbario/autobahn-python/releases/tag/v26_10_1), which was released by the vendor with the per-frame decompression budget enforced for all four compression extensions; the code change is in PR https://github.com/crossbario/autobahn-python/pull/1987 (commit a41442bbee4f6126a8ce1bb892840124c24d16f1) and the advisory is at https://github.com/crossbario/autobahn-python/security/advisories/GHSA-pjh6-c8mg-3x7m. Because the fix relies on Decompressor.process(output_buffer_limit=...), also ensure the compression backend is at brotli>=1.2.0 on CPython or brotlicffi>=1.2.0 on PyPy - 26.10.1 raises these floors in the compress extra, so a manually pinned older brotli would leave the limit unavailable. If an immediate upgrade is not possible, the actionable interim control is to stop offering/accepting the permessage-brotli extension on affected servers (permessage-brotli is opt-in, so removing it from the negotiated extension list eliminates the vulnerable code path) at the cost of losing brotli compression for those clients while deflate remains available and unaffected; lowering maxFramePayloadSize is not a reliable mitigation because Brotli ratios near 1,000,000:1 make the wire bound largely ineffective, and connection-level throttling or memory caps only limit the blast radius rather than the per-frame allocation.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in pypi, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Autobahn Python implements WebSocket (RFC 6455) and WAMP over both Twisted and asyncio, and supports the four per-message compression extensions (permessage-deflate, -bzip2, -brotli, -snappy) as optional extras. The root cause is CWE-409 (improper handling of highly compressed data - a decompression bomb), with the advisory also tagging CWE-770 (allocation of resources without limits). An earlier fix (GHSA-hxp9-w8x3-p566) routed the remaining maxMessagePayloadSize budget into decompress_message_data(..., max_output_len=...); deflate and bzip2 stop at that budget, but PerMessageBrotli.decompress_message_data in compress_brotli.py calls self._decompressor.process(data) with no limit and only compares the resulting length afterwards, so a single frame is fully inflated before the 1009 rejection. The code comment and changelog argued the input was still 'bounded on the wire by maxFramePayloadSize', which is weak protection because Brotli reaches compression ratios near 1,000,000:1 (841 bytes expand to about 1 GiB); the reporter measured 545 MiB peak RSS from a 421-byte frame against a server configured with maxFramePayloadSize=64 KiB and maxMessagePayloadSize=1 MiB (baseline 28 MiB). brotli >= 1.2.0 exposes Decompressor.process(data, output_buffer_limit=N), which the upstream fix uses so brotli stops at the budget like the other extensions; the compress extra floors were raised to brotli>=1.2.0 (CPython) and brotlicffi>=1.2.0 (PyPy) accordingly. The trigger is exactly as described in the advisory and PoC: a single crafted brotli-compressed WebSocket frame from a connecting client to a server that has enabled and negotiated permessage-brotli; no authentication or user interaction is required (CVSS PR:N/UI:N), and the independent assessment rates attack complexity as low because one small frame suffices, in contrast to the network-vector/high-complexity scoring in the published CVSS base of 5.9. Repeated or concurrent connections multiply the allocation.
Know when Autobahn Python gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Network-reachable, no auth or interaction, and the PoC shows a single small frame triggers it with no race or timing condition, so AC:L not AC:H; availability-only impact.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
Autobahn Python is a WebSocket and WAMP implementation for Python that supports Twisted and asyncio. From 26.7.1 until 26.10.1, PerMessageBrotli.decompress_message_data in compress_brotli.py calls the Brotli decompressor without an output limit and checks maxMessagePayloadSize only after a complete frame has been inflated. An unauthenticated WebSocket client can send a small, highly compressed frame that allocates hundreds of MiB before rejection, causing memory-exhaustion denial of service on servers that enable the opt-in permessage-brotli feature through the compress extra. Deflate and bzip2 already enforce the remaining output budget and are outside this residual vulnerability. This issue is fixed in version 26.10.1.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
EUVD-2026-110320
GHSA-pjh6-c8mg-3x7m
NVD
CVE.org
EPSS
Exploit-DB