Executive brief
webtransport-go is a Go library used to implement the WebTransport protocol, which allows for high-performance communication between web clients and servers. A vulnerability in how the library handles unrecognized data packets (capsules) allows a malicious user to force the application to consume excessive amounts of memory. This can lead to a denial-of-service (DoS) condition where the application crashes or becomes unresponsive, disrupting service for all users.
Technical details
The vulnerability exists in the `Session.parseNextCapsule` function of webtransport-go. When the library encounters an unknown WebTransport capsule type on an HTTP/3 request stream, it attempts to skip it using `io.ReadAll`. Because the capsule reader is only limited by the length declared in the capsule header, a malicious peer can send a capsule with a massive payload, forcing the receiver to allocate a corresponding amount of memory. While QUIC flow control limits buffered data on the wire, it does not prevent this application-layer allocation because reading the stream advances the flow control window while the bytes are retained in memory. The issue is resolved in version 0.11.1 by using `io.Copy(io.Discard, r)` to drain unknown capsules without buffering them.
Affected products
- quic-go webtransport-go <= 0.11.0
Timeline
- 2026-06-20: other: Pull request to fix the issue submitted
- 2026-07-05: patched: Version 0.11.1 released
- 2026-07-24: advisory: GitHub Advisory published
References
- https://github.com/quic-go/webtransport-go/security/advisories/GHSA-g35j-m5xg-vh3q
- https://github.com/quic-go/webtransport-go/pull/290
- https://github.com/quic-go/webtransport-go/commit/3aecd11736579530ff067651c30a543eb0b4b8c4
- https://github.com/quic-go/webtransport-go/releases/tag/v0.11.1
- https://api.github.com/repos/quic-go/webtransport-go/security-advisories/GHSA-g35j-m5xg-vh3q