Subject: [quicwg/base-drafts] 6f9f8d: Curtail CONNECTION_CLOSE for small Initial

From: Martin Thomson <[email-masked]>
Date: Tue, 11 Feb 2020 16:02:40 -0800

Branch: refs/heads/master
  Home:   https://github.com/quicwg/base-drafts
  Commit: 6f9f8d7ffca4eed3373bb9f64261f85fd5f76b1a
      https://github.com/quicwg/base-drafts/commit/6f9f8d7ffca4eed3373bb9f64261f85fd5f76b1a
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-09 (Mon, 09 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Curtail CONNECTION_CLOSE for small Initial

This is trickier than I had imagined.  Sending CONNECTION_CLOSE is
probably fine, but it's harder to do this correctly now.  You can't just
send an unauthenticated CONNECTION_CLOSE because that might disrupt a
real connection.  So there are two goals in tension:

1. Don't kill an active connection (attempt) unnecessarily.

2. Provide feedback about errors.

The observation is that an attacker can disrupt connections by eliciting
a CONNECTION_CLOSE, so feedback naturally leads to an exposure to a DoS
attack.  That's unfortunate, but we have established that we don't care
about DoS by an on-path attacker prior to handshake completion.
Anything we do here has got to be best effort.

DoS prevention would say that you just discard junk, and that is
probably the right answer.  But we have a number of cases where the
robustness of the system depends on getting feedback.

Either way, we agreed to allow CONNECTION_CLOSE in Initial, so the
exposure exists anyway.  So this contains advice.  Maybe too much
advice, but I thought that I'd see what people thought.

Closes #3269.

  Commit: ffa7f98abc53f92a0e98fe927e65cea492736e4c
      https://github.com/quicwg/base-drafts/commit/ffa7f98abc53f92a0e98fe927e65cea492736e4c
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-10 (Tue, 10 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Add point about off-path packets to handshake DoS section

  Commit: 173d00664bd9c547cd042401621e80bed802e7dc
      https://github.com/quicwg/base-drafts/commit/173d00664bd9c547cd042401621e80bed802e7dc
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-10 (Tue, 10 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Reword

  Commit: a2f06723986f303023c8fcfc8bd9c3a5ddb5368c
      https://github.com/quicwg/base-drafts/commit/a2f06723986f303023c8fcfc8bd9c3a5ddb5368c
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-10 (Tue, 10 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Does this help?

  Commit: e99cd67f95601f37b2b6930f28693b7d3a1044aa
      https://github.com/quicwg/base-drafts/commit/e99cd67f95601f37b2b6930f28693b7d3a1044aa
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-11 (Wed, 11 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md
    A metadata.min.js

  Log Message:
  -----------
  Merge branch 'master' into close-small-initial

  Commit: f302f3ec69913684ce35c61df7fb0fd9a461e3bf
      https://github.com/quicwg/base-drafts/commit/f302f3ec69913684ce35c61df7fb0fd9a461e3bf
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-11 (Wed, 11 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Stateless immediate close

This says that immediate close when you don't have state doesn't have to
establish state.  Thus, if an endpoint has to immediately close, which
can do so without entering the closing period, which would establish
state.  It makes a general statement, which is that during the handshake
- that is, for unauthenticated inputs - packets can be discarded rather
than causing an immediate close.

This greatly simplifies the text for a small initial.  Now it only needs
to say "MUST discard, MAY immediate close as well".

  Commit: 7864bda6e4dd98d9e033ce49be4350d849b7f361
      https://github.com/quicwg/base-drafts/commit/7864bda6e4dd98d9e033ce49be4350d849b7f361
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-11 (Wed, 11 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Rewording suggestions

Co-Authored-By: Jana Iyengar <[email-masked]>

  Commit: 47228989491e2cdf3606c5d9745c43fb8aac2afd
      https://github.com/quicwg/base-drafts/commit/47228989491e2cdf3606c5d9745c43fb8aac2afd
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-11 (Wed, 11 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Rewrap

  Commit: 6971443498f64d31ec7bebeadfe2215e21c4b19a
      https://github.com/quicwg/base-drafts/commit/6971443498f64d31ec7bebeadfe2215e21c4b19a
  Author: Martin Thomson <[email-masked]>
  Date:   2019-12-11 (Wed, 11 Dec 2019)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Refer to fields properly

  Commit: 5020e34e82d19398cb90acb3a450d6e140e4bf9a
      https://github.com/quicwg/base-drafts/commit/5020e34e82d19398cb90acb3a450d6e140e4bf9a
  Author: Martin Thomson <[email-masked]>
  Date:   2020-02-12 (Wed, 12 Feb 2020)

  Changed paths:
    M draft-ietf-quic-http.md
    M draft-ietf-quic-qpack.md
    M draft-ietf-quic-recovery.md
    M draft-ietf-quic-tls.md
    M draft-ietf-quic-transport.md
    R initial-protection.js
    R metadata.min.js
    A protection-samples.js

  Log Message:
  -----------
  Merge branch 'master' into close-small-initial

  Commit: f45e58d6934099faa40a8d569e50b2bcf21015db
      https://github.com/quicwg/base-drafts/commit/f45e58d6934099faa40a8d569e50b2bcf21015db
  Author: Martin Thomson <[email-masked]>
  Date:   2020-02-12 (Wed, 12 Feb 2020)

  Changed paths:
    M draft-ietf-quic-transport.md

  Log Message:
  -----------
  Merge pull request #3292 from quicwg/close-small-initial

Define stateless CONNECTION_CLOSE

Compare: https://github.com/quicwg/base-drafts/compare/922bd62ad235...f45e58d69340