[META] Transport payload-size limits: consistent, correct, cross-transport enforcement
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 15/100
- Tipo di issue
- Bug
- Chiarezza
- Da chiarire
- Stato di attività
- Ferma
- Stack tecnologico
- python
- Ambito
- backend, networking
Direzione di ricerca
Questo è un epic di tracciamento, quindi inizia con le issue figlie 1908, 1909, 1910, 1911 e la issue Crossbar 2250 invece di apportare modifiche qui. Leggi il design concordato e il punto di enforcement onFrameData; l’epic è completato quando ogni figlia ha il proprio PR testato e tutto il lavoro elencato è completo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
This is a tracking epic for a coordinated hardening of payload/message size
limits across the Autobahn|Python transports (WebSocket + RawSocket) and their
use in Crossbar.io. It originates from a reported denial-of-service issue
(security advisory GHSA-hxp9-w8x3-p566, "permessage-deflate bypasses
maxMessagePayloadSize after inflation", reported by Team Atlanta), but the
investigation surfaced a small cluster of related defects and design gaps that
are best fixed together so the size-limit model is finally coherent.
No development happens on this issue. Each child below is fixed on its own
issue + branch + PR, following our TDD red/green workflow (add the failing test
first, prove it red in CI, then fix, prove it green — all on the child's PR).
This epic is closed manually once all children are done.
The core problem: one knob, four possible meanings
There are two independent axes to a "size limit":
| on-the-wire (compressed) | at-the-application (uncompressed) | |
|---|---|---|
| per-frame | maxFramePayloadSize (correct) |
(no knob — covered transitively) |
| per-message | (no knob — covered transitively) | maxMessagePayloadSize |
Today maxMessagePayloadSize is documented as bounding the "re-assembled
payload" (uncompressed), enforced on send against the uncompressed message,
and enforced by RawSocket against the (uncompressed, no-compression) wire
message — but on the WebSocket receive path (Hybi/v13) it is enforced against
the compressed frame length, before inflation. A tiny compressed frame can
therefore inflate past the configured limit and reach the application. Hixie
(v0) already accounts uncompressed bytes correctly; Hybi is the outlier.
Agreed design (see child issues for detail)
- D1 — semantic anchor.
maxMessagePayloadSize= maximum size of a single
serialized WAMP message (transport payload), measured uncompressed — i.e.
before compression on send, after decompression on receive. This is already
true on send, on RawSocket, and on Hixie receive; we bring Hybi receive in
line. Default stays0(unlimited), so no existing deployment changes. - D2 — two knobs, correctly defined.
maxMessagePayloadSize(per-message,
uncompressed) +maxFramePayloadSize(per-frame, wire). The other two matrix
cells are covered transitively (enforcing the uncompressed per-message cap
during inflation also bounds a single-frame bomb; bounding uncompressed
transitively bounds accepted wire bytes). We deliberately do not add more
knobs — the existing two, defined correctly, are sufficient and less confusing. - Enforcement site. Backend-agnostic, at the inflation site in
onFrameData, so it works identically in message mode and streaming
(frame-based) mode (which differ only by whichonMessage*callbacks a
consumer overrides), and independently of the compression backend
(deflate / snappy / bzip2 / brotli).
Children (dependency-ordered)
- https://github.com/crossbario/autobahn-python/issues/1908
- https://github.com/crossbario/autobahn-python/issues/1909
- https://github.com/crossbario/autobahn-python/issues/1910
- https://github.com/crossbario/autobahn-python/issues/1911
- https://github.com/crossbario/crossbar/issues/2250
Cross-references
- Security advisory: GHSA-hxp9-w8x3-p566 (public; developed in the open).
- Related class: CVE-2016-10544 (ws / Node.js — same compressed-vs-decompressed
boundary mistake). - Ties into the Track T testing epic (parametrized both-backend / both-transport
/ multi-codec size-limit coverage; Crossbar zip-bomb functest into CI).
This work is being completed with AI assistance (Claude Code); all commits are
human-reviewed per AI_POLICY.md.
- Lingua principale
- Python
- Stelle
- 2.5k
- Fork
- 767
- Merge medio
- 1g 2h
- PR unite (30g)
- 22
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di crossbario/autobahn-python
-
CI-CD enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
crossbario/autobahn-python#1945 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug CI-CD
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
crossbario/autobahn-python#1932 ·
I maintainer di solito rispondono entro 1 giorno
-
CI-CD enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
crossbario/autobahn-python#1829 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
crossbario/autobahn-python#1963 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 68/100
crossbario/autobahn-python#1962 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di crossbario/autobahn-python
Issue simili
-
debt
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
microsoft/vscode-flake8#601 ·
I maintainer di solito rispondono entro 1 giorno
-
nonews refactor
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
Uninett/nav#4255 · 1 commento · 1 reazione ·
I maintainer di solito rispondono entro 3 giorni
-
namespace operations
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 70/100
EclipseFdn/open-vsx.org#14421 ·
I maintainer di solito rispondono entro 1 giorno
-
untriaged
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
ubuntu/ubuntu-project-docs#850 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno