Hi Hannes,

Let me see if I can clarify then :)

On Fri, Apr 24, 2020, at 18:31, Hannes Tschofenig wrote:
> > Say that a connection spans two network paths.  CID A is used on path 
> A; CID B is used on path B.
> I guess you are considering a scenario where a device, of the lifetime 
> of the communication with another peer, changes from CID A to CID B.
> Is this correct?

I don't think that DTLS really says what the CID is for, but this particular 
attack depends on being able to shift records from a datagram containing a 
record that has CID A to a datagram containing a record with CID B.  So this 
depends on either concurrent use of the two CIDs, or moving a record from 
before a change in CID to after a change.

Imagine that you have record 1 and 2 in the same datagram, with record 1 having 
CID A and record 2 having no explicit CID (but for the same connection, as 
required).  Then record 3 is sent with CID B (maybe on a different path).  The 
attacker can remove record 2 from the first datagram and add it to the second.  
If the attacker can determine whether record 2 was consumed, it can confirm 
that CID A and CID B are for the same connection.

> > Let's assume that you need a connection ID to route (otherwise, why 
> bother), but that the first record in each datagram is all that is 
> needed for that purpose.
> What do you mean by "route" here? The CID was primarily introduced to 
> allow the receiving party to correctly find the correct security 
> context to verify and decrypt the packet.

by "route" I am trying to be generic.  In QUIC, the CID is used by cooperating 
middleboxes to select server instances.  But as you say, it is also used to 
identify which connection (and the right keys) to pick from potentially many 
choices, without necessarily using addressing information (which might have 
changed).  To me, that's all just routing, whether between boxes, or threads, 
or connections.
 
> > If an endpoint sends a datagram on path A that contains two records where 
> > the second record omits the connection ID, then an attacker can strip that 
> > second record out and copy it into a datagram sent on path B.  With the 
> > current design, the receiver accepts that packet and maybe leaks some 
> > signal to the attacker that CID A and CID B really are the same connection.
> 
> If you copy the record that does not contain the CID and send it to the 
> peer independently then with the current text in the spec the packet 
> will be dropped.

Probably, yeah.  That's why you need to find a record with the other CID to 
pair it with.  Besides, the "attack" is trying to link CID A and CID B, and 
having the record consumed without linking to either doesn't tell the attacker 
much (except perhaps that the CID wasn't needed for routing purposes).

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

Reply via email to