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

Adding a description of stream commitment attacks in security section #445

Merged
merged 7 commits into from
Apr 24, 2017
28 changes: 27 additions & 1 deletion draft-ietf-quic-transport.md
Original file line number Diff line number Diff line change
Expand Up @@ -2209,7 +2209,7 @@ MUST terminate the connection with an error of type QUIC_TOO_MANY_OPEN_STREAMS
({{error-handling}}).


## Stream Concurrency
## Stream Concurrency {#stream-concurrency}

An endpoint limits the number of concurrently active incoming streams by setting
the concurrent stream limit (see {{transport-parameter-definitions}}) in the
Expand Down Expand Up @@ -2697,6 +2697,32 @@ also be forward-secure encrypted. Since the attacker will not have the forward
secure key, the attacker will not be able to generate forward-secure encrypted
packets with ACK frames.

## Stream Commitment Attack

An adversarial endpoint can open lots of streams,
exhausting state on the server.
The adversarial endpoint, or endpoint, could repeat the process on a
large number of connections, in a manner similar to
SYN flooding attacks in TCP.

Normally, clients will open streams sequentially,
as explained in {{stream-identifiers}}.
However, when several streams are initiated at short intervals,
transmission error may cause STREAM DATA frames opening streams to be
received out of sequence. A receiver is obligated to open intervening
streams if a higher-numbered stream ID is received. Thus, on a
new connection, opening stream 2000001 opens 1 million streams,
as required by the specification.

The number of active streams is limited
by the concurrent stream limit transport
parameter, as explained in {{stream-concurrency}}.
If chosen judisciously, this limit
mitigates the effect of the stream commitment attack.
However, setting the limit
too low could affect performance when
applications expect to open large number
of streams.

# IANA Considerations

Expand Down