Skip to main content

Autobahn Python CVE-2026-116579

| EUVDEUVD-2026-110320 MEDIUM
Improper Handling of Highly Compressed Data (Data Amplification) (CWE-409)
2026-10-26 GitHub_M GHSA-pjh6-c8mg-3x7m
5.9
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Connect to permessage-brotli WebSocket endpoint
  2. Delivery
    Send tiny crafted brotli frame
  3. Exploit
    Server inflates whole frame before limit check
  4. Execution
    Hundreds of MiB allocated per frame
  5. Impact
    Memory 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

autobahn-python 26.7.1, < 26.10.1

Affected Packages

pypi autobahn fix: 26.10.1
euvd autobahn_python fix: 26.10.1

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

Vendor (GitHub_M) PRIMARY 5.9 MEDIUM
AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Red Hat 5.9 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

Lifecycle Timeline

1
Patch available
Oct 26, 2026 - 21:03 EUVD

DescriptionCVE.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

EPSS Score
0.4%
Top 63% exploitable
Prevalence
Medium
popular Python WebSocket/WAMP library, but vulnerable brotli feature is opt-in
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +30
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy