Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

quic: disable sending of Version Negotiation packets #1433

Closed
marten-seemann opened this issue Jun 25, 2021 · 1 comment · Fixed by #2015
Closed

quic: disable sending of Version Negotiation packets #1433

marten-seemann opened this issue Jun 25, 2021 · 1 comment · Fixed by #2015
Labels
kind/enhancement A net-new feature or improvement to an existing feature

Comments

@marten-seemann
Copy link
Contributor

QUIC is susceptible to Request Forgery Attacks: https://www.rfc-editor.org/rfc/rfc9000.html#name-request-forgery-with-versio

In short, the client controls both the source and the destination connection ID (both up to 255 bytes in length), which the server will echo in a Version Negotiation Packet. The client therefore is able to control byte 2 - 511 of a Version Negotiation Packet (the first bit of byte 1 is given by the wire format of the VN packet, the remaining 7 bits are chosen by random).

In a p2p setting, there's no reason to do version negotiation at all: as addresses are advertised and discovered, nothing prevents us from including the QUIC version in the advertisement. We didn't do this for draft version, as we didn't want to burn too many multiaddr code points (and the request forgery attack described above wasn't discovered yet at that point).

With QUIC becoming stable, we'll be at a point to clean this up soon: Once draft-29 is phased out of the network, we can change the definition of the quic multiaddr codepoint to mean "QUIC v1 (RFC 9000)", and disable sending of Version Negotiation packets.

Once a new version of QUIC is standardized, we'd need to define a new code point for that version.

cc @Stebalien and @aschmahmann, as we discussed this a while ago

@marten-seemann marten-seemann added kind/enhancement A net-new feature or improvement to an existing feature status/blocked Unable to be worked further until needs are met effort/hours Estimated to take one or several hours labels Jun 25, 2021
@marten-seemann
Copy link
Contributor Author

This has now been released in quic-go v0.22.0, so we can flip the switch any time we want.

@marten-seemann marten-seemann removed the effort/hours Estimated to take one or several hours label Jul 25, 2021
@marten-seemann marten-seemann transferred this issue from libp2p/go-libp2p-quic-transport Apr 22, 2022
@marten-seemann marten-seemann changed the title disable sending of Version Negotiation packets quic: disable sending of Version Negotiation packets Apr 22, 2022
@marten-seemann marten-seemann removed the status/blocked Unable to be worked further until needs are met label Jan 27, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/enhancement A net-new feature or improvement to an existing feature
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant