quicssh
quicssh copied to clipboard
fix(deps): update module github.com/quic-go/quic-go to v0.42.0 [security]
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| github.com/quic-go/quic-go | v0.35.1 -> v0.42.0 |
GitHub Vulnerability Alerts
CVE-2023-49295
An attacker can cause its peer to run out of memory sending a large number of PATH_CHALLENGE frames. The receiver is supposed to respond to each PATH_CHALLENGE frame with a PATH_RESPONSE frame. The attacker can prevent the receiver from sending out (the vast majority of) these PATH_RESPONSE frames by collapsing the peers congestion window (by selectively acknowledging received packets) and by manipulating the peer's RTT estimate.
I published a more detailed description of the attack and its mitigation in this blog post: https://seemann.io/posts/2023-12-18-exploiting-quics-path-validation/
There's no way to mitigate this attack, please update quic-go to a version that contains the fix.
CVE-2024-22189
An attacker can cause its peer to run out of memory by sending a large number of NEW_CONNECTION_ID frames that retire old connection IDs. The receiver is supposed to respond to each retirement frame with a RETIRE_CONNECTION_ID frame. The attacker can prevent the receiver from sending out (the vast majority of) these RETIRE_CONNECTION_ID frames by collapsing the peers congestion window (by selectively acknowledging received packets) and by manipulating the peer's RTT estimate.
I published a more detailed description of the attack and its mitigation in this blog post: https://seemann.io/posts/2024-03-19-exploiting-quics-connection-id-management/. I also presented this attack in the IETF QUIC working group session at IETF 119: https://youtu.be/JqXtYcZAtIA?si=nJ31QKLBSTRXY35U&t=3683
There's no way to mitigate this attack, please update quic-go to a version that contains the fix.
Release Notes
quic-go/quic-go (github.com/quic-go/quic-go)
v0.42.0
New Features
- added a qlog tracer for events that happen before / outside of established connection: #4305
Notable Changes
- added a
ClientHelloInfo.AddrVerifiedfield: #4360 - move callback controlling address verification (
VerifySourceAddress) to theTransport: #4253 and #4362 - connections that are closed before being accepted are not removed from the server's accept queue: #4245
- http3: added a
RoundTripOpt.CheckSettingscallback to check the server's SETTINGS: #4355 - http3: send the HTTP/3 settings value for Extended CONNECT (RFC 9220): #4341
- http3: don't modify the user's
quic.Configto enable QUIC datagram support: #4340
Fixes
- mitigate a memory exhaustion attack against QUIC's connection ID mechanism: #4369
- don't delay acknowledgments for packets during the handshake: #4279
- fix deadlock when closing both
ListenerandTransport: #4332 - fix handling of IPv4-mapped IPv6 addresses: #4309
- fix duplicate logging of the
key_discardedevent for Handshake packets: #4274 - send CONNECTION_REFUSED when refusing connections: #4250
- http3: tighten validation logic for the :protocol pseudo header: #4261
What's Changed
- remove shutdown method on the Connection by @marten-seemann in https://github.com/quic-go/quic-go/pull/4249
- send the CONNECTION_REFUSED error when refusing a connection by @marten-seemann in https://github.com/quic-go/quic-go/pull/4250
- don't remove closed connections from the server's accept queue by @marten-seemann in https://github.com/quic-go/quic-go/pull/4245
- handshake: unexport Set{Read,Write}Key methods on the cryptoSetup by @marten-seemann in https://github.com/quic-go/quic-go/pull/4254
- handshake: fix documentation for updatableAEAD.SetWriteKey by @putyWang in https://github.com/quic-go/quic-go/pull/4256
- add Transport config options to limit the number of handshakes by @marten-seemann in https://github.com/quic-go/quic-go/pull/4248
- remove the RequireAddressValidation callback from the Config by @marten-seemann in https://github.com/quic-go/quic-go/pull/4253
- fix incorrect statement about connection ID lengths in the Transport by @marten-seemann in https://github.com/quic-go/quic-go/pull/4247
- remove unneeded nil check for new connections in the server by @marten-seemann in https://github.com/quic-go/quic-go/pull/4260
- ci: update to Go 1.22rc2 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4267
- fix flaky handshake limiting test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4270
- http3: only use :protocol pseudo-header for Extended CONNECT by @taoso in https://github.com/quic-go/quic-go/pull/4261
- fix flaky accept queue test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4280
- fix flaky handshake limiting test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4281
- only log the discarding of Handshake keys once by @marten-seemann in https://github.com/quic-go/quic-go/pull/4274
- testutils: add a perspective function parameter to ComposeInitialPacket by @marten-seemann in https://github.com/quic-go/quic-go/pull/4276
- fix flaky outgoing streams map test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4283
- wire: remove FrameParser interface, expose FrameParser struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/4284
- ackhandler: remove unused RTTStats from the received packet handler by @marten-seemann in https://github.com/quic-go/quic-go/pull/4287
- testutils: make the package public by @marten-seemann in https://github.com/quic-go/quic-go/pull/4290
- ci: remove unused depguard check for qtls by @marten-seemann in https://github.com/quic-go/quic-go/pull/4291
- ci: make Codecov ignore testutils and testdata by @marten-seemann in https://github.com/quic-go/quic-go/pull/4292
- testutils: expose aliases for all frames by @marten-seemann in https://github.com/quic-go/quic-go/pull/4293
- ackhandler: don't delay ACKs for Initial and Handshake packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4288
- protocol: rename VersionNumber to Version by @marten-seemann in https://github.com/quic-go/quic-go/pull/4295
- wire: optimize generation of Version Negotiation packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4278
- protocol: don't capitalize Perspective.String by @marten-seemann in https://github.com/quic-go/quic-go/pull/4296
- qlog: remove unneeded mutex from the ConnectionTracer by @marten-seemann in https://github.com/quic-go/quic-go/pull/4299
- qlog: rename qlog.go to connection_tracer.go by @marten-seemann in https://github.com/quic-go/quic-go/pull/4301
- qlog: disentangle the ConnectionTracer from the qlog writer by @marten-seemann in https://github.com/quic-go/quic-go/pull/4300
- logging: add a Debug function to the Tracer by @marten-seemann in https://github.com/quic-go/quic-go/pull/4297
- logging: add a Close function to the Tracer by @marten-seemann in https://github.com/quic-go/quic-go/pull/4298
- don't enqueue stream when receiving reordered MAX_STREAM_DATA frames by @marten-seemann in https://github.com/quic-go/quic-go/pull/4269
- fix flaky 0-RTT packet drop test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4306
- handshake: validate HKDF-Expand-Label against crypto/tls implementation by @marten-seemann in https://github.com/quic-go/quic-go/pull/4311
- qlog: rename generation to key_phase on key_updated and key_discarded by @marten-seemann in https://github.com/quic-go/quic-go/pull/4315
- README: Add frp to list of projects by @bt90 in https://github.com/quic-go/quic-go/pull/4316
- ci: update to Go 1.22.0 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4312
- avoid lock contention when accepting new connections by @marten-seemann in https://github.com/quic-go/quic-go/pull/4313
- ci: update Codecov action to v4 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4321
- don't preallocate the slice for STREAM frames when composing a packet by @marten-seemann in https://github.com/quic-go/quic-go/pull/4314
- handshake: add benchmarks for the Initial AEAD by @marten-seemann in https://github.com/quic-go/quic-go/pull/4320
- only check for stateless resets if packet doesn't belong to a connection by @marten-seemann in https://github.com/quic-go/quic-go/pull/4322
- qtls: protect the tls.ClientSessionCache implementation with a mutex by @marten-seemann in https://github.com/quic-go/quic-go/pull/4319
- ci: update golangci-lint to v1.56.1 and golangci-lint action to v4 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4326
- remove unused GetVersion function from quicConn interface by @marten-seemann in https://github.com/quic-go/quic-go/pull/4327
- reenable previously disabled server unit test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4328
- remove unused getPerspective function from quicConn interface by @marten-seemann in https://github.com/quic-go/quic-go/pull/4329
- remove unused perspective arg from packetHandlerMap.ReplaceWithClosed by @marten-seemann in https://github.com/quic-go/quic-go/pull/4330
- http3: don't automatically set RoundTripper.QuicConfig.EnableDatagrams by @marten-seemann in https://github.com/quic-go/quic-go/pull/4340
- http3: send SETTINGS_ENABLE_CONNECT_PROTOCOL (for Extended CONNECT) by @marten-seemann in https://github.com/quic-go/quic-go/pull/4341
- http3: reject duplicate control streams opened by the server by @marten-seemann in https://github.com/quic-go/quic-go/pull/4342
- http3: reject duplicate control streams opened by the client by @marten-seemann in https://github.com/quic-go/quic-go/pull/4344
- ci: enable Dependabot for GitHub Actions by @marten-seemann in https://github.com/quic-go/quic-go/pull/4343
- server: fix deadlock when closing concurrently with transport by @sukunrt in https://github.com/quic-go/quic-go/pull/4332
- build(deps): bump actions/upload-artifact from 3 to 4 by @dependabot in https://github.com/quic-go/quic-go/pull/4346
- build(deps): bump docker/build-push-action from 4 to 5 by @dependabot in https://github.com/quic-go/quic-go/pull/4347
- build(deps): bump docker/login-action from 2 to 3 by @dependabot in https://github.com/quic-go/quic-go/pull/4348
- build(deps): bump docker/setup-qemu-action from 2 to 3 by @dependabot in https://github.com/quic-go/quic-go/pull/4345
- build(deps): bump docker/setup-buildx-action from 2 to 3 by @dependabot in https://github.com/quic-go/quic-go/pull/4349
- handshake: embed the mask as an array into the aesHeaderProtector by @marten-seemann in https://github.com/quic-go/quic-go/pull/4324
- handshake: optimize AEAD handling for long header sealers and openers by @marten-seemann in https://github.com/quic-go/quic-go/pull/4323
- unmap IPv4-mapped IPv6 addresses by @thijsvandien in https://github.com/quic-go/quic-go/pull/4309
- docs: improve API documentation for OpenStreamSync by @wlynxg in https://github.com/quic-go/quic-go/pull/4352
- add a qlog tracer for events outside of QUIC connections by @marten-seemann in https://github.com/quic-go/quic-go/pull/4305
- remove unused ReceiveStream.CloseRemote method by @marten-seemann in https://github.com/quic-go/quic-go/pull/4357
- update GoMock to v0.4.0 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4361
- add an AddrVerified field to the ClientHelloInfo by @marten-seemann in https://github.com/quic-go/quic-go/pull/4360
- http3: add a RoundTripOpt to check the server's SETTINGS frame by @marten-seemann in https://github.com/quic-go/quic-go/pull/4355
- use Transport.VerifySourceAddress to control the Retry Mechanism by @marten-seemann in https://github.com/quic-go/quic-go/pull/4362
- close connection when an abnormally large number of frames are queued by @marten-seemann in https://github.com/quic-go/quic-go/pull/4369
New Contributors
- @putyWang made their first contribution in https://github.com/quic-go/quic-go/pull/4256
- @taoso made their first contribution in https://github.com/quic-go/quic-go/pull/4261
- @thijsvandien made their first contribution in https://github.com/quic-go/quic-go/pull/4309
- @wlynxg made their first contribution in https://github.com/quic-go/quic-go/pull/4352
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.41.0...v0.42.0
v0.41.0
New Features
- When calling
quic.Connection.SendDatagram, we now queue up to 32 DATAGRAMs before blocking this method: #4222. This should lead to significant performance improvements for applications that send a lot of datagrams. - DATAGRAM frames that don't fit into a packet (at the current MTU) are now dropped: #4221.
- http3: The remote address (as a
net.Addr) can now be obtained from the HTTP/3 request context using thehttp3.RemoteAddrContextKey: #4208. Thanks to @oncilla! - http3: When an
http.Handlerpanics, the stream is now reset: #4181. Thanks to @WeidiDeng! - http3: The
http3.Servernow has aConnContextfunction, working analogously tohttp.Server.ConnContext: #4230. Thanks to @rthellend! - logging: Information about the negotiated ALPN is logged using
logging.ConnectionTracer.ChoseALPN: #4216. Thanks to @birneee! - qlog: The package now provides an implementation of the
quic.Config.ConnectionTracercallback that reads the QLOGDIR environment variable, and writes qlogs to that directory. Thanks to @birneee!
Breaking Changes
- This release drops support for Go 1.20 (#4195). We decided to support the old Go version a little bit earlier than usual (before the Go 1.22 release) this time, since this allowed us to completely remove our custom TLS fork that was necessary before crypto/tls gained QUIC support in Go 1.21. If you rely on Go 1.20, you can continue using the v0.40.1 release.
- The
DroppedPacketcallback on thelogging.ConnectionTracernow contains the packet number of the dropped packet, allowing for better logging of duplicate packets: #4171
Other Changes
- Only attempt 0-RTT resumption if the session-ticket allowed 0-RTT: #4183
- http3: The context cancelation error is now returned from
RoundTrip: #4203 - http3: use the
AdditionalSettingsfor on HTTP/3 requests: #4156
Please support quic-go!
Is your project / company relying on quic-go? Please consider funding the project. Any support is highly appreciated!
Changelog
- congestion: don't use floating point math when calculating pacing times by @marten-seemann in https://github.com/quic-go/quic-go/pull/4148
- don't set the TLS version in the transport by @marten-seemann in https://github.com/quic-go/quic-go/pull/4135
- ackhandler: immediately acknowledge ECN-CE marked packets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4147
- README: fix typo by @anderspitman in https://github.com/quic-go/quic-go/pull/4166
- fix flaky server test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4167
- fix serialization of connection ID in filenames of qlog files by @marten-seemann in https://github.com/quic-go/quic-go/pull/4170
- logging: pass the packet number to ConnectionTracer.DroppedPacket by @marten-seemann in https://github.com/quic-go/quic-go/pull/4171
- interop: update Go version to 1.21.4 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4179
- wire: reject NEW_CONNECTION_ID frames with zero-length conneciton IDs by @marten-seemann in https://github.com/quic-go/quic-go/pull/4180
- send large max_datagram_frame size, introduce a DatagramTooLargeError error by @chungthuang in https://github.com/quic-go/quic-go/pull/4143
- fuzzing: add transport parameter validation logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4175
- reduce calls to time.Now() calls in connection by @birneee in https://github.com/quic-go/quic-go/pull/4191
- http3: use the AdditionalSettings for requests by @marten-seemann in https://github.com/quic-go/quic-go/pull/4156
- README: add gost project by @char8x in https://github.com/quic-go/quic-go/pull/4154
- qtls: only attempt 0-RTT resumption for 0-RTT enabled session tickets by @marten-seemann in https://github.com/quic-go/quic-go/pull/4183
- examples: close listener, connection and stream in echo client and server by @rfyiamcool in https://github.com/quic-go/quic-go/pull/4188
- fuzzing: update Go version to 1.21 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4192
- integrationtests: remove leftover code for Go 1.19 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4193
- limit the number of queued PATH_RESPONSE frames to 256 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4199
- don't retransmit PATH_CHALLENGE and PATH_RESPONSE frames by @marten-seemann in https://github.com/quic-go/quic-go/pull/4200
- ci: update golangci-lint to v1.55.2 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4204
- fuzzing: add frame field validation logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4206
- http3: add remote address to request context by @oncilla in https://github.com/quic-go/quic-go/pull/4208
- http3: reset stream when a handler panics by @WeidiDeng in https://github.com/quic-go/quic-go/pull/4181
- http3: don't use error string as a format string by @nanokatze in https://github.com/quic-go/quic-go/pull/4211
- http3: improve debug message when determining the listener port fails by @nanokatze in https://github.com/quic-go/quic-go/pull/4214
- http3: return the context cancellation error from RoundTrip by @marten-seemann in https://github.com/quic-go/quic-go/pull/4203
- qlog: add support for alpn_information event by @birneee in https://github.com/quic-go/quic-go/pull/4216
- drop support for Go 1.20, build on Go 1.22rc1 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4195
- utils: use time.Duration.Abs by @marten-seemann in https://github.com/quic-go/quic-go/pull/4217
- utils: switch to builtin min and max funtions by @marten-seemann in https://github.com/quic-go/quic-go/pull/4218
- http3: fix channel size in ListenAndServe by @narqo in https://github.com/quic-go/quic-go/pull/4219
- qtls: remove unneeded type alias for the tls.QUICEncryptionLevel by @marten-seemann in https://github.com/quic-go/quic-go/pull/4220
- discard DATAGRAM frames that don't fit into packets without an ACK by @marten-seemann in https://github.com/quic-go/quic-go/pull/4221
- queue up to 32 DATAGRAM frames to send by @marten-seemann in https://github.com/quic-go/quic-go/pull/4222
- use a ring buffer for the datagram queue by @marten-seemann in https://github.com/quic-go/quic-go/pull/4223
- handshake: remove unneeded mutex in cryptoSetup by @marten-seemann in https://github.com/quic-go/quic-go/pull/4227
- README: add RoadRunner to list of projects by @marten-seemann in https://github.com/quic-go/quic-go/pull/4226
- wire: use netip.AddrPort in the Preferred Address transport parameter by @marten-seemann in https://github.com/quic-go/quic-go/pull/4232
- ackhandler: refactor ACK queueing logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4225
- fix race condition when dropping Initial packet with short connection ID by @marten-seemann in https://github.com/quic-go/quic-go/pull/4236
- http3: add ConnContext to the server by @rthellend in https://github.com/quic-go/quic-go/pull/4230
- example: add config flag for TLS key and cert for the server by @marten-seemann in https://github.com/quic-go/quic-go/pull/4237
- wire: improve logging of connection ID retirements by @marten-seemann in https://github.com/quic-go/quic-go/pull/4241
- qlog: add a default tracer that writes to QLOGDIR by @birneee in https://github.com/quic-go/quic-go/pull/4233
- example: remove -v flag and custom logger configuration by @marten-seemann in https://github.com/quic-go/quic-go/pull/4242
- example: remove -qlog flag in favor of QLOGDIR by @marten-seemann in https://github.com/quic-go/quic-go/pull/4243
- http3: add a basic README by @marten-seemann in https://github.com/quic-go/quic-go/pull/4246
New Contributors
- @anderspitman made their first contribution in https://github.com/quic-go/quic-go/pull/4166
- @chungthuang made their first contribution in https://github.com/quic-go/quic-go/pull/4143
- @char8x made their first contribution in https://github.com/quic-go/quic-go/pull/4154
- @rfyiamcool made their first contribution in https://github.com/quic-go/quic-go/pull/4188
- @oncilla made their first contribution in https://github.com/quic-go/quic-go/pull/4208
- @nanokatze made their first contribution in https://github.com/quic-go/quic-go/pull/4211
- @narqo made their first contribution in https://github.com/quic-go/quic-go/pull/4219
- @rthellend made their first contribution in https://github.com/quic-go/quic-go/pull/4230
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.40.0...v0.41.0
v0.40.1
This release contains fixes for a resource exhaustion attack on QUIC's path validation logic (CVE-2023-49295), see https://seemann.io/posts/2023-12-18-exploiting-quics-path-validation for details:
- limit the number of queued PATH_RESPONSE frames to 256 (https://github.com/quic-go/quic-go/pull/4199)
- don't retransmit PATH_CHALLENGE and PATH_RESPONSE frames (https://github.com/quic-go/quic-go/pull/4200)
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.40.0...v0.40.1
v0.40.0
API Changes
Connection.{Send,Receive}Messagewas renamed to{Send,Receive}Datagram: #4116- Closing a
Listenercreated from aTransportdoesn't close already established QUIC connections: #4072 - http3: the
ResponseWriternow automatically discards the response body for HEAD requests: #4115
Other Changes / Fixes
- When using
Dial(notDialEarly) now doesn't perform 0-RTT handshake, even if the session ticket allows 0-RTT: #4125 - ClientHellos offering TLS versions older than 1.3 are now reject (when using Go 1.20): #4130
- EPERM sendmsg errors (see https://github.com/golang/go/issues/63322) are now automatically caught: #4111
- Sending CONNECTION_REFUSED now doesn't spawn a new Go routine: #4091
- Sending Retry packets now doesn't spawn a new Go routine: #4092
Please support quic-go!
Is your project / company relying on quic-go? Please consider funding the project. Any support is highly appreciated!
Changelog
- simplify sending of INVALID_TOKEN errors by @marten-seemann in https://github.com/quic-go/quic-go/pull/4090
- don't spawn a new Go routine to send a CONNECTION_REFUSED packet by @marten-seemann in https://github.com/quic-go/quic-go/pull/4091
- don't spawn a new Go routine to send a Retry packet by @marten-seemann in https://github.com/quic-go/quic-go/pull/4092
- README: add qlog to list of supported RFCs, add an example by @marten-seemann in https://github.com/quic-go/quic-go/pull/4102
- fix IPv4 ECN control message length on FreeBSD by @marten-seemann in https://github.com/quic-go/quic-go/pull/4110
- catch EPERM sendmsg errors for the very first packet on Linux by @marten-seemann in https://github.com/quic-go/quic-go/pull/4111
- use new gomock feature to generate type-safe methods in mocks by @marten-seemann in https://github.com/quic-go/quic-go/pull/4057
- http3: discard body from responses to HEAD requests by @Glonee in https://github.com/quic-go/quic-go/pull/4115
- fix logging of connection IDs in tracer test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4118
- ci: create separate artifact archives per workflow run by @marten-seemann in https://github.com/quic-go/quic-go/pull/4121
- ci: use bash on all platforms by @marten-seemann in https://github.com/quic-go/quic-go/pull/4122
- rename Connection.{Send,Receive}Message to {Send,Receive}Datagram by @marten-seemann in https://github.com/quic-go/quic-go/pull/4116
- fix IPv4 ECN control message length on Linux by @marten-seemann in https://github.com/quic-go/quic-go/pull/4127
- use typed atomics in integration tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/4120
- ci: run linter on all supported Go versions by @marten-seemann in https://github.com/quic-go/quic-go/pull/4126
- never allow 0-RTT when using Dial, even if the session ticket allows it by @marten-seemann in https://github.com/quic-go/quic-go/pull/4125
- reject ClientHellos that offer TLS versions older than 1.3 (for Go 1.20) by @marten-seemann in https://github.com/quic-go/quic-go/pull/4130
- handshake: clone the tls.Config returned by GetConfigForClient by @marten-seemann in https://github.com/quic-go/quic-go/pull/4133
- handshake: set MinVersion on the Config returned by GetConfigForClient by @marten-seemann in https://github.com/quic-go/quic-go/pull/4134
- don't close established connections on Listener.Close, when using a Transport by @marten-seemann in https://github.com/quic-go/quic-go/pull/4072
- README: link to webtransport-go repo by @marten-seemann in https://github.com/quic-go/quic-go/pull/4117
- fix race condition in multiplex integration test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4136
- document what happens to established connections on Listener.Close by @marten-seemann in https://github.com/quic-go/quic-go/pull/4138
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.39.0...v0.40.0
v0.39.4
This release contains fixes for a resource exhaustion attack on QUIC's path validation logic (CVE-2023-49295), see https://seemann.io/posts/2023-12-18-exploiting-quics-path-validation for details:
- limit the number of queued PATH_RESPONSE frames to 256 (https://github.com/quic-go/quic-go/pull/4199)
- don't retransmit PATH_CHALLENGE and PATH_RESPONSE frames (https://github.com/quic-go/quic-go/pull/4200)
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.39.3...v0.39.4
v0.39.3
This patch contains two fixes:
- The
tls.Configreturned byGetConfigForClientis now cloned before quic-go modifies it: https://github.com/quic-go/quic-go/pull/4133 - The
MinVersionon thetlsConfigreturned byGetConfigForClientis not set to TLS 1.3, making sure that the TLS stack doesn't negotiate a TLS version older than 1.3: https://github.com/quic-go/quic-go/pull/4134
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.39.2...v0.39.3
v0.39.2
This patch release fixes the control message length for the ECN control message on Linux systems (https://github.com/quic-go/quic-go/pull/4127), which lead to sendmsg: invalid argument errors on some platforms.
v0.39.1
This patch release fixes the control message length for the ECN control message on FreeBSD systems (#4110), which lead to sendmsg: invalid argument errors.
v0.39.0
New Features
- quic-go now uses feeds ECN signals into its congestion controller (#4059). ECN is used by routers to signal congestion before queues overflow (and packets are dropped). When using ECN, there are a number of failure modes, which necessitates some rather complex validation logic, see section 13.4 of RFC 9000 for details. ECN support can be disabled by setting the
QUIC_GO_DISABLE_ECNenvironment variable totrue. - The HTTP/3 package introduced a
http3.Error, making the errors returned by the http3 package more useful, and allowing easy assertions of the HTTP/3 error codes defined in RFC 9114: #4039
Other Changes
- The key used to encrypt resumption tokens can now be configured using using
Transport.TokenGeneratorKey: #4066 - The RTT is now saved in session tickets, even when not using 0-RTT, allowing for faster session resumption: #4042
- The reason for dial cancelations is now returned, when the context is canceled using a
context.CancelCauseFunc: #4078
When using Go 1.21, make sure to build with (at least) Go 1.21.1, as this release fixes a remote-triggered panic in crypto/tls. See the release announcement for details.
Breaking Changes
Config.DisableVersionNegotiationPacketswas moved to theTransport: #4047Config.MaxTokenAgewas moved to theTransport: #4084Config.MaxRetryTokenAgewas removed. The age limit for Retry tokens is now set to twice the handshake timeout: #4064- The handshake timeout is now set to twice the handshake idle timeout: #4063. For clients, it is recommend to limit the duration of the handshake by using setting the context on the
Dialcall. - The
logging.Tracerandlogging.ConnectionTracerare now structs (not interfaces): #4082
Please support quic-go!
Is your project / company relying on quic-go? Please consider funding the project. Any support is highly appreciated!
Changelog
- ci: fix integration test running with and without GSO by @marten-seemann in https://github.com/quic-go/quic-go/pull/4043
- ci: fix syntax error in integration test workflow by @marten-seemann in https://github.com/quic-go/quic-go/pull/4048
- fix flaky version negotiation connection unit test by @marten-seemann in https://github.com/quic-go/quic-go/pull/4052
- switch from unmaintained golang/mock to go.uber.org/mock by @marten-seemann in https://github.com/quic-go/quic-go/pull/4050
- move the DisableVersionNegotiationPackets flag to the Transport by @marten-seemann in https://github.com/quic-go/quic-go/pull/4047
- move GSO control message handling to the oobConn by @marten-seemann in https://github.com/quic-go/quic-go/pull/4056
- integration tests: fix connection timeout in 0-RTT test by @tanghaowillow in https://github.com/quic-go/quic-go/pull/4060
- ackhandler: rename variables to follow RFC 9002 terminology by @marten-seemann in https://github.com/quic-go/quic-go/pull/4062
- ci: update GitHub checkout and setup-go actions to v4 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4067
- update qtls-go1-20 to v0.3.4 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4068
- remove TLS post-handshake message reassembly logic by @marten-seemann in https://github.com/quic-go/quic-go/pull/4073
- ackhandler: use the receive time of the Retry packet for RTT estimation by @marten-seemann in https://github.com/quic-go/quic-go/pull/4070
- set the handshake timeout to twice the handshake idle timeout by @marten-seemann in https://github.com/quic-go/quic-go/pull/4063
- remove Config.MaxRetryTokenAge, set it to the handshake timeout by @marten-seemann in https://github.com/quic-go/quic-go/pull/4064
- randomize the serialization order of control frames by @marten-seemann in https://github.com/quic-go/quic-go/pull/4069
- add ECN support by @marten-seemann in https://github.com/quic-go/quic-go/pull/4059
- save the RTT in non-0-RTT session tickets by @tanghaowillow in https://github.com/quic-go/quic-go/pull/4042
- remove duplicate mocks for the Tracer and the ConnectionTracer by @marten-seemann in https://github.com/quic-go/quic-go/pull/4076
- ackhandler: detect ECN mangling by @marten-seemann in https://github.com/quic-go/quic-go/pull/4080
- ci: clean up Codecov ignore list by @marten-seemann in https://github.com/quic-go/quic-go/pull/4081
- expose GSO usage through ConnectionState by @birneee in https://github.com/quic-go/quic-go/pull/4083
- add a Transport config option for the key used to encrypt tokens by @marten-seemann in https://github.com/quic-go/quic-go/pull/4066
- http09: increase the startup timeout in tests by @marten-seemann in https://github.com/quic-go/quic-go/pull/4071
- ci: fail if any Go files contain an ignore directive by @marten-seemann in https://github.com/quic-go/quic-go/pull/4055
- ci: combine the go generate workflow with the linting workflow by @marten-seemann in https://github.com/quic-go/quic-go/pull/4053
- integrate ClusterFuzzLite by @marten-seemann in https://github.com/quic-go/quic-go/pull/4034
- http3: introduce an HTTP/3 error type by @marten-seemann in https://github.com/quic-go/quic-go/pull/4039
- make the logging.Tracer and logging.ConnectionTracer a struct by @marten-seemann in https://github.com/quic-go/quic-go/pull/4082
- move MaxTokenAge configuration option to the Transport by @marten-seemann in https://github.com/quic-go/quic-go/pull/4084
- return the cancellation cause for cancelled dials by @marten-seemann in https://github.com/quic-go/quic-go/pull/4078
- remove unused unknownPacketHandler interface by @marten-seemann in https://github.com/quic-go/quic-go/pull/4093
- ackhandler: don't fail ECN validation if less than 10 testing packets are lost by @marten-seemann in https://github.com/quic-go/quic-go/pull/4088
- ackhandler: fix ECN mangling detection when packets are lost by @marten-seemann in https://github.com/quic-go/quic-go/pull/4089
- README: add Hysteria by @tobyxdd in https://github.com/quic-go/quic-go/pull/4085
- update gomock to v0.3.0 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4087
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.38.1...v0.39.0
v0.38.2
This release contains fixes for a resource exhaustion attack on QUIC's path validation logic (CVE-2023-49295), see https://seemann.io/posts/2023-12-18-exploiting-quics-path-validation for details:
- limit the number of queued PATH_RESPONSE frames to 256 (https://github.com/quic-go/quic-go/pull/4199)
- don't retransmit PATH_CHALLENGE and PATH_RESPONSE frames (https://github.com/quic-go/quic-go/pull/4200)
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.38.1...v0.38.2
v0.38.1
What's Changed
- move QUIC_GO_DISABLE_GSO check out of init by @jfgiorgi in https://github.com/quic-go/quic-go/pull/4041
- update qtls to v0.3.3 by @marten-seemann in https://github.com/quic-go/quic-go/pull/4044
- remove the port from the hostname used for tls.Config.ServerName by @marten-seemann in https://github.com/quic-go/quic-go/pull/4046
Full Changelog: https://github.com/quic-go/quic-go/compare/v0.38.0...v0.38.1
v0.38.0
Generic Segmentation Offload (GSO)
This release re-enables GSO by default. We shipped GSO support in v0.36.0 (see the release notes for that release for an explanation of what GSO is), but had to disable it due to problems in certain configurations and on certain platforms. We believe that we now manage to properly detect these and automatically fall back to the non-GSO code path (https://github.com/quic-go/quic-go/pull/4005). Th
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
- [ ] If you want to rebase/retry this PR, check this box
This PR was generated by Mend Renovate. View the repository job log.