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

Repeating Version Negotiation #143

Closed
martinthomson opened this issue Jan 13, 2017 · 2 comments
Closed

Repeating Version Negotiation #143

martinthomson opened this issue Jan 13, 2017 · 2 comments
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.

Comments

@martinthomson
Copy link
Member

Servers shouldn't need to send more than one version negotiation packet, they only resend so that they are stateless and to deal with packet loss on the return path.

Clients should ignore version negotiation packets if they already have received packets from the server.

This requirement on the client could be used for denial of service in the case where the legitimate server needs to use version negotiation. If an attacker can race a legitimate looking ServerHello at the client (which isn't impossible), then the client will ignore the real server's attempt at version negotiation. This is hard for an off-path attacker due to the need to echo certain parts of the client initial packet. (I'd say connection ID is enough, but that might run afoul of #119.)

@martinthomson martinthomson added design An issue that affects the design of the protocol; resolution requires consensus. -transport labels Jan 13, 2017
@mnot mnot changed the title Only do version negotiation once Repeating Version Negotiation Jan 20, 2017
@martinthomson
Copy link
Member Author

The denial of service exposure is limited to an attacker successfully racing their ServerHello with the legitimate response from the real server. With #361, an attacker doesn't need to see the entropy in the QUIC header to construct this message, all it has to know is that the client is going to be trying to handshake on a given 5-tuple.

The fact that the remainder of the packet will be unusable (an off-path attacker won't be able to construct a valid set of handshake traffic keys) doesn't mean that the client will be any happier. The only defense against that is to insist that the client operate multiple parallel handshakes. That's probably too much effort for an attack with such narrow applicability.

If the attacker is on-path, they win, of course.

Historically, we've let denial of service attacks on the handshake to succeed, it's just too easy for an attacker to mess with things at that stage. That might be the right answer here too.

@martinthomson
Copy link
Member Author

Closed in #474.

@mnot mnot added the has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list. label Sep 26, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
-transport design An issue that affects the design of the protocol; resolution requires consensus. has-consensus An issue that the Chairs have determined has consensus, by canvassing the mailing list.
Projects
None yet
Development

No branches or pull requests

2 participants