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

Document request forgery #3996

Merged
merged 13 commits into from
Sep 8, 2020
Merged

Document request forgery #3996

merged 13 commits into from
Sep 8, 2020

Conversation

martinthomson
Copy link
Member

First cut at this, sorry about it being so long. It's fairly hard to
write this, particularly since the existing documentation is so sparse.
Hopefully this is clear enough. I haven't had time to properly
proof-read it, so it's probably not very good. But I thought I'd share
what I got.

This includes some basic countermeasures, but they aren't very good.
I think that's OK, but we should discuss.

Closes #3995.

First cut at this, sorry about it being so long.  It's fairly hard to
write this, particularly since the existing documentation is so sparse.
Hopefully this is clear enough.  I haven't had time to properly
proof-read it, so it's probably not very good.  But I thought I'd share
what I got.

This includes some basic countermeasures, but they aren't very good.
I think that's OK, but we should discuss.

Closes #3995.
@martinthomson martinthomson added design An issue that affects the design of the protocol; resolution requires consensus. -transport labels Aug 13, 2020
Copy link
Member

@kazuho kazuho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there are some errors (left comments), but this looks good.

draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
available over a different interface or the address was provided by a service
at a non-loopback address. Endpoints that depend on these capabilities could
offer an option to disable these protections.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's nice, but in many scenarios any of the node addresses can be used to reach services local to the node, in the same way as loopback addresses. In server farm scenarios, this requires guessing the local IP of the specific server, but that can probably be done. Same for clients behind NAT.

Copy link
Contributor

@igorlord igorlord Aug 14, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@huitema This is certainly a way to mount an attack on services that assume that they are serving friendly clients and the network perimeter is secure. It happens, especially when services listen only on RFC1918/unique-local or link-local IPs. It happens even more often with services only listen to loopback and, therefore, think they are immune to any threats coming from outside of the host.

That's why the following is generalizing "non-loopback -> loopback" to “globally routable IP space” -> “RFC1918/unique-local IP space” -> “link-local” -> “loopback”.

draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
Comment on lines 6451 to 6454
Unlike other packets, packet protection provides good protection against
control over the contents of Initial packets. The choice of an unpredictable
Destination Connection ID by clients ensures that servers are unable to control
any of the encryption portion of Initial packets.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This para's grammar hurts my head. Alternative might be

"Initial packet protection provides resilience to control of contents by servers. Client choice of an unpredictable Destination Connection ID ensures servers are unable to control any of the encrypted portion of Initial packets."

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then I might concate the next paragraph to this and say

"However, the Token field is open to control and does allow a server to use clients to mount request forgery attacks."

SHOULD NOT refuse to use an address unless they have specific knowledge about
the network that indicates that sending datagrams to unvalidated addresses in a
given range is not safe.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is indeed a valid scenario for client and server discovering that they are behind the same NAT. Wasn't that scenario addressed in Web-RTC using a discovery protocol involving temporary names, in an attempt at privacy?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you're referring to draft-ietf-rtcweb-mdns-ice-candidates. For us to do something like that we'd need a way to convey hostnames in preferred_address or elsewhere, and I'm not sure we should be doing that.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with David. I don't see any way that the MDNS thing would make sense except in a very narrow domain (which WebRTC is). Nothing stopping someone from defining an extension, of course.

@huitema
Copy link
Contributor

huitema commented Aug 13, 2020

I like the general text. I am worried that the response to these attacks may need to evolve over time as we understand them better. I was looking at ways to say that. No specific suggestion yet.

draft-ietf-quic-transport.md Show resolved Hide resolved
attacker be able to predict the packet number and placement of frames in
packets with some amount of reliability.

Limiting control over datagram content is considered infeasible. The primary
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Eliminating it completely is infeasible. Limiting it certainly seems possible. As a simple precaution, an implementation might opt to break up large STREAM/CRYPTO frames and then randomize the order of frames while building the packet, distributing any padding to be added between frames instead of appending it.

There's no requirement or even substantial performance impact if the stream bytes are out-of-order within the packet.

Unlike other packets, packet protection provides good protection against
control over the contents of Initial packets. The choice of an unpredictable
Destination Connection ID by clients ensures that servers are unable to control
any of the encryption portion of Initial packets.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
any of the encryption portion of Initial packets.
any of the encrypted portion of Initial packets.

Destination Connection ID by clients ensures that servers are unable to control
any of the encryption portion of Initial packets.

The only field in an Initial packets that is open to server control is the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
The only field in an Initial packets that is open to server control is the
The only field in Initial packets that is open to server control is the

draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
draft-ietf-quic-transport.md Outdated Show resolved Hide resolved
martinthomson and others added 5 commits August 14, 2020 14:31
OK, some of these are pretty big in that they fix my errors by inverting the meaning.

Co-authored-by: Lucas Pardue <lucaspardue.24.7@gmail.com>
Co-authored-by: Kazuho Oku <kazuhooku@gmail.com>
Co-authored-by: Mike Bishop <mbishop@evequefou.be>
that rely on the Token field can be avoided if clients do not include a value
when the server address has changed from when the NEW_TOKEN frame was received.

Clients MUST NOT send a token received in a NEW_TOKEN frame from one server
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This MUST NOT is qualified by the subsequent text to a point of being unenforceable, especially due to "shared prefix of a sufficient length". Since it is up to implementations to choose what "sufficient" is, an implementation could deem "/0", to be "sufficient" and it would be valid. Since this is unenforceable, it probably warrants a "SHOULD NOT".

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since there's a large escape hatch below, I agree that perhaps a SHOULD NOT is better here. The following text effectively explains why this isn't a MUST NOT.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm at SHOULD NOT on my copy already. I guess I forgot to push it.

Copy link
Contributor

@janaiyengar janaiyengar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for writing this up! A few comments; almost all are editorial suggestions. Only a couple of questions.

@@ -6357,6 +6357,217 @@ this behavior. An endpoint can then immediately close the connection with a
connection error of type PROTOCOL_VIOLATION; see {{immediate-close}}.


## Request Forgery Attacks

A request forgery attack occurs where one endpoint causes its peer to perform
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
A request forgery attack occurs where one endpoint causes its peer to perform
A request forgery attack occurs where an endpoint causes its peer to perform

## Request Forgery Attacks

A request forgery attack occurs where one endpoint causes its peer to perform
some unwanted action, such as issuing a request. Request forgery attacks aim to
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not clear on the terminology here, but isn't "request forgery" by definition limited to the action of issuing a request? If so, maybe this could be "causes its peer to issue a request towards a victim, where the request is crafted by the endpoint to inflict damage on the victim.".

Comment on lines 6366 to 6367
forgery attack is often used to gain access to implicit authorization conferred
by their peer's location in the network.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
forgery attack is often used to gain access to implicit authorization conferred
by their peer's location in the network.
forgery attack is often used to exploit any implicit authorization conferred
on the peer by the victim due to the peer's location in the network.

by their peer's location in the network.

For request forgery to be effective, an attacker needs to be able to influence
what their peer sends, and where it is sent. If an attacker can target a
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
what their peer sends, and where it is sent. If an attacker can target a
what packets the peer sends, and to which target. If an attacker can target a

draft-ietf-quic-transport.md Show resolved Hide resolved
request forgery. Endpoints could refuse to use these addresses entirely, but
that carries a significant risk of interfering with legitimate cases. Endpoints
SHOULD NOT refuse to use an address unless they have specific knowledge about
the network that indicates that sending datagrams to unvalidated addresses in a
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
the network that indicates that sending datagrams to unvalidated addresses in a
the network indicating that sending datagrams to unvalidated addresses in a

lack proper authentication. Endpoints MAY prevent connection attempts or
migration to a loopback address. Endpoints SHOULD NOT allow connections or
migration to a loopback address if the same service was previously
available over a different interface or the address was provided by a service
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
available over a different interface or the address was provided by a service
available at a different address, or if the address was was provided by a service

Comment on lines 6551 to 6553
frames in packets prior to completing address validation. Note that this might
not constrain some attacks as it does not prevent an attacker from using the
Destination Connection ID field.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
frames in packets prior to completing address validation. Note that this might
not constrain some attacks as it does not prevent an attacker from using the
Destination Connection ID field.
frames in packets prior to completing address validation. Note that this does
not prevent an attacker from using the Destination Connection ID field for
an attack.

Comment on lines 6559 to 6562
attacks. Endpoints MAY choose to avoid sending datagrams to these ports or that
match these patterns prior to validating the target address. Endpoints MAY
retire connection IDs containing patterns known to be problematic without using
them.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
attacks. Endpoints MAY choose to avoid sending datagrams to these ports or that
match these patterns prior to validating the target address. Endpoints MAY
retire connection IDs containing patterns known to be problematic without using
them.
attacks. Endpoints MAY avoid sending datagrams to these ports or not send
datagrams that match these patterns prior to validating the destination address.
Endpoints MAY retire connection IDs containing patterns known to be problematic
without using them.

Note:

: Modifying endpoints to apply these protections is more efficient than
deploying network-based protections, as endpoints don't need to perform
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
deploying network-based protections, as endpoints don't need to perform
deploying network-based protections, as endpoints do not need to perform

Copy link
Member Author

@martinthomson martinthomson left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks Jana,

I started applying these, then realized that I needed to rewrap and make other tweaks, so I've just made most of these changes, verbatim, as part of a manual commit.

draft-ietf-quic-transport.md Show resolved Hide resolved
draft-ietf-quic-transport.md Show resolved Hide resolved
Comment on lines 6383 to 6384
the data sent by QUIC endpoints is protected, this includes control over
ciphertext. An attack is successful if an attacker can cause a peer to send a
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We use a stream cipher, which is essentially an XOR with a predictable sequence. If you know what the sequence is (this is trivial if you have the keys, just encrypt all zero values), then you know what the transform is and then, you can choose plaintext that is the XOR of the ciphertext you want.

Comment on lines 6427 to 6428
encrypted portions of packets. It is necessary to assume that endpoints are
able to control the contents of frames that a peer sends, especially those
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This goes back to the encryption-by-XOR from above. If I can control plaintext and make some good guesses about where it might appear, then I can control ciphertext.

draft-ietf-quic-transport.md Show resolved Hide resolved
Comment on lines 6449 to 6450
other types of packet to a destination that does not understand QUIC and is
willing to accept connections.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that was supposed to be "....or is not willing to accept a QUIC connection"

that rely on the Token field can be avoided if clients do not include a value
when the server address has changed from when the NEW_TOKEN frame was received.

Clients MUST NOT send a token received in a NEW_TOKEN frame from one server
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm at SHOULD NOT on my copy already. I guess I forgot to push it.

The Destination Connection ID field of packets that the client sends to a
preferred address can be used for request forgery.

A client SHOULD NOT send non-probing frames to a preferred address prior to
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm good with MUST NOT.

Comment on lines 6496 to 6498
This document does not offer any additional specific countermeasures that can
be implemented by endpoints aside from the generic measures described in
{{forgery-generic}}.
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These countermeasures are not comprehensive. Hence "additional". Re-reading this though, I felt the need to reword...

Copy link
Contributor

@janaiyengar janaiyengar left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is good. Thank you for working through the comments, @martinthomson !

@janaiyengar
Copy link
Contributor

janaiyengar commented Aug 20, 2020

This has been around for a week now and I've heard no serious concerns but a fair bit of support. I'm marking this proposal-ready. Gah! This is the PR :-/ The issue's already been marked :-)

@janaiyengar janaiyengar added proposal-ready An issue which has a proposal that is believed to be ready for a consensus call. and removed proposal-ready An issue which has a proposal that is believed to be ready for a consensus call. labels Aug 20, 2020
Copy link
Member

@kazuho kazuho left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@martinthomson Thank you for all the efforts that have gone into this PR.

Rereading it, I wonder if we should be talking about 0-RTT too, I think that 0-RTT can be also used as an attack vector. The attacker has the knowledge regarding the packet protection keys that will be used for 0-RTT, and it is easy to guess what packet number will be used.

Based on that, much like NEW_TOKEN tokens, I think it might be the case that we have to recommend to not use 0-RTT when the client resumes a connection to a different server address.

@martinthomson
Copy link
Member Author

A server might be able to control 0-RTT content, but it can't control 0-RTT keys because those are derived from the ClientHello, which includes a nonce value the server can't predict (ClientHello.random). I note here that this is true for our TLS integration, but might not be true for other cryptographic handshakes.

@kazuho
Copy link
Member

kazuho commented Aug 24, 2020

@martinthomson Thanks. Of course you are correct. I was only think about Early Secret, a value that can be estimated by the server. But in this case, it is client_early_traffic_secret that matters, and that incorporates ClientHello.

Initial packet protection (Section 5.2 of {{QUIC-TLS}}) makes it difficult for
servers to control the content of Initial packets sent by clients. A client
choosing an unpredictable Destination Connection ID ensures that servers are
unable to control any of the encrypted portion of Initial packets from clients.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't believe that this is correct as written if there is a Retry because the server gets to control the next DCID. I don't think that this is relevant because you would need a round trip to make it work (I think!) but...

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is mentioned in the last paragraph of this section. Perhaps we just need to reference that here?

connection migration to cause a server to send datagrams to that address.

The Destination Connection ID field in any packets that a server subsequently
sends to this spoofed address can be used for request forgery.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, I think not just DCID. Consider a (contrived) protocol in which the server was able to dictate the contents of the client's plaintext message. Because the server knows the keys, it can then produce any ciphertext of its choice.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While the above is contrived, the server does have control of some things. For instance, I can control some of the content of GETs or ACKs.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't that prevented by address validation?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, this is general, but it is mentioned above. I will add a reminder.

Copy link
Contributor

@DavidSchinazi DavidSchinazi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I do think that this PR is going in the right direction, but I don't think it's quite ready to be merged yet.

the Token field. After sending a Retry, the server can also control the
Destination Connection ID field of subsequent Initial packets from the client.
This also might allow indirect control over the encrypted content of Initial
packets. However, the exchange of a Retry packet validates the server's
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have text that explicitly mandates that replies to a RETRY packet MUST be sent to the same address?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The design of QUIC relies on endpoints retaining a stable address for the duration of the handshake. An endpoint MUST NOT initiate connection migration before the handshake is confirmed, as defined in section 4.1.2 of [QUIC-TLS].

Not sure if that is enough, as this is not directly a requirement, but more of an assumption.

Initial packet protection (Section 5.2 of {{QUIC-TLS}}) makes it difficult for
servers to control the content of Initial packets sent by clients. A client
choosing an unpredictable Destination Connection ID ensures that servers are
unable to control any of the encrypted portion of Initial packets from clients.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is mentioned in the last paragraph of this section. Perhaps we just need to reference that here?

ID field of packets that the client sends to a preferred address can be used
for request forgery.

A client MUST NOT send non-probing frames to a preferred address prior to
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seeing this normative requirement in Security Considerations makes me uneasy as an implementer might miss it. Could we instead move the MUST NOT to the section that defines preferred_address and then only reference it here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that repetition will do.

connection migration to cause a server to send datagrams to that address.

The Destination Connection ID field in any packets that a server subsequently
sends to this spoofed address can be used for request forgery.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Isn't that prevented by address validation?

sends to this spoofed address can be used for request forgery.

A server that only sends probing packets ({{probing}}) to an address prior to
address validation provides an attacker with only limited control over the
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do find it somewhat ironic that address validation might make this worse: the client sending a PATH_CHALLENGE to the server can pretty much guarantee that the server will send a PATH_RESPONSE with client-provided content to the client's spoofed source address. Should we mention that?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I considered it, but thought that the generic text was enough. Note also that there is no guarantee that PATH_RESPONSE is sent on the same path.

draft-ietf-quic-transport.md Show resolved Hide resolved
SHOULD NOT refuse to use an address unless they have specific knowledge about
the network that indicates that sending datagrams to unvalidated addresses in a
given range is not safe.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you're referring to draft-ietf-rtcweb-mdns-ice-candidates. For us to do something like that we'd need a way to convey hostnames in preferred_address or elsewhere, and I'm not sure we should be doing that.

control some of the unprotected content of those packets. As much of the data
sent by QUIC endpoints is protected, this includes control over ciphertext. An
attack is successful if an attacker can cause a peer to send a UDP datagram to
a host that will perform some action based on content in the datagram.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we add a paragraph here that provides examples of real harm? What protocols are both UDP-based and non-authenticated in a way that would make them vulnerable to a request forgery from a QUIC stack?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have anything concrete. Any example would be hard to describe with anything other than "this person/organization did something really unwise". Given the absence of a news-worthy example that would be easy to reference, this is really just a request to search for someone to shame.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not trying to shame anyone. I'm trying to ascertain whether this change is the right one: we're worsening the performance of the protocol (by requiring extra round-trips in some scenarios) and if the attack is purely theoretical then we shouldn't do that. Having a concrete example of actual harm would help motivate the performance degradation.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The only place this adds a round trip is for a migration to a preferred address, but that only delays migration, it doesn't prevent the connection from being used.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Message Send Service (RFC 1312) seems like a potential target.

This service is primarily intended for "open" environments:
controlled local area networks used by reasonably trusted
participants, in which security considerations may be relaxed in the
interests of ease of use and administration. In such an environment
it is appropriate to trust the user name and source IP address as
identifying the actual sender of the message.


Note:

: Modifying endpoints to apply these protections is more efficient than
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This depends on what you mean by efficient. Some of the recommendations in this section will add a round-trip which is not efficient.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I must be very confused, but your round trip point seems wrong. The key point here is that the round trip is not safe, so any time you attempt that you are exposing services to a potential attack. The point of this text is to describe heuristics that might block attacks without sending a packet at all.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's definitely possible that I'm the one confused. In my understanding, we have two ways of solving the "QUIC endpoint is sending attacker-controlled data to unvalidated address" issue:

  1. the QUIC endpoint limits what it sends before validation
  2. a magical network appliance verifies that the QUIC endpoint isn't sending evil packets where it shouldn't

I do agree with you that we want (1) instead of (2), but saying that (1) is more efficient than (2) isn't necessarily true if you measure efficiency as QUIC performance, because (1) can add a round trip but (2) doesn't

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The first requires that the endpoint decide before it sends anything. It can't add a round trip, because that round trip would enable the attack.

Copy link
Contributor

@ianswett ianswett left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm concerned about this new SHOULD NOT, but maybe I'm misunderstanding it?

Token field when the server address has changed from when the NEW_TOKEN frame
was received.

Therefore, clients SHOULD NOT send a token received in a NEW_TOKEN frame from
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To clarify, the NEW_TOKEN frame is not received from a server in an Initial packet, correct? The first few times I read this, I though that was what you intended.

Assuming I'm now reading this correctly, this SHOULD NOT would seem to be very restrictive for domains which use DNS to load balance traffic. Previously, I assumed that NEW_TOKEN would be used whenever hostnames matched. Am I understanding correctly?

If we're going to add this normative restriction, I would suggest placing the restriction in the section on address validation/etc and then referencing this section.

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.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Request forgery attacks
10 participants