Hi Matt:

I agree with your interpretation, in that there should be no records of any 
type between the CSS and the Handshake/Finished message, even during 
re-handshake. The full handshake (and subsequent key material) cannot be 
validated until the Handshake/Finished messages has been received and processed.

Any AppData received between a CSS and Handshake/Finished is potentially 
malicious data trying to sneak in before the Handshake is verified; forwarding 
this data to an upper layer would be potentially harmful. A MITM would hope 
that the data would be processed by an application before the TLS layer 
receives and verifies the Handshake/Finished message.

--
-Todd Short
// tsh...@akamai.com<mailto:tsh...@akamai.com>
// "One if by land, two if by sea, three if by the Internet."

On Oct 13, 2015, at 5:12 AM, Matt Caswell 
<fr...@baggins.org<mailto:fr...@baggins.org>> wrote:

Hello,

Does anyone have any views on the below?

Thanks

Matt

On 30/09/15 11:06, Matt Caswell wrote:
Hi all

I have a question on how to interpret RFC 5246 with regards to the
interleaving of app data and handshake records.

RFC 5246 (and RFC 4346 before it) contains these words:

  Note: Data of different TLS Record layer content types MAY be
  interleaved.  Application data is generally of lower precedence for
  transmission than other content types.  However, records MUST be
  delivered to the network in the same order as they are protected by
  the record layer.  Recipients MUST receive and process interleaved
  application layer traffic during handshakes subsequent to the first
  one on a connection.

This wording seems to place no limits whatsoever on when it is valid to
receive app data in the handshake. By the wording in the RFC it would be
valid for app data to be received *after* the ChangeCipherSpec has been
received but *before* the Finished has been processed.

There is also this wording:

  Note: If a rehandshake occurs while data is flowing on a connection,
  the communicating parties may continue to send data using the old
  CipherSpec.  However, once the ChangeCipherSpec has been sent, the
  new CipherSpec MUST be used.  The first side to send the
  ChangeCipherSpec does not know that the other side has finished
  computing the new keying material (e.g., if it has to perform a
  time-consuming public key operation).  Thus, a small window of time,
  during which the recipient must buffer the data, MAY exist.  In
  practice, with modern machines this interval is likely to be fairly
  short.

I think this means that as soon as the first party sends a CCS, they
must not send any app data until they have received a CCS back - they
must buffer it until the CCS is seen - but on reading it again I'm not
sure! If that were the case then the second party should never expect to
see app data between CCS and Finished. It doesn't tell you anything
about what the first party can expect though, i.e. is the second party
allowed to send app data between the CCS and Finished?

Finally there is also this:

  A Finished message is always sent immediately after a change
  cipher spec message to verify that the key exchange and
  authentication processes were successful.

I suppose this trumps everything else, although as this section is
specifically talking about handshakes you could interpret "immediately"
as applying to the handshake sequence only without saying anything about
interleaved app data records.

I believe the intention is that app data should not be sent between the
CCS and Finished but the RFC wording is not exactly crystal clear. This
is the interpretation I have taken whilst fixing this OpenSSL bug:

https://rt.openssl.org/Ticket/Display.html?id=3712&user=guest&pass=guest

Can some confirm my interpretation is correct?

Thanks

Matt



_______________________________________________
TLS mailing list
TLS@ietf.org<mailto:TLS@ietf.org>
https://www.ietf.org/mailman/listinfo/tls

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to