Преглед изворни кода

crypto/tls: detect unexpected leftover handshake data

There should be no data in the Handshake buffer on encryption state
changes (including implicit 1.3 transitions). Checking that also blocks
all Handshake messages fragmented across CCS.

BoGo: PartialClientFinishedWithClientHello
tls13
Filippo Valsorda пре 7 година
committed by Peter Wu
родитељ
комит
c758567785
2 измењених фајлова са 13 додато и 0 уклоњено
  1. +10
    -0
      13.go
  2. +3
    -0
      handshake_server.go

+ 10
- 0
13.go Прегледај датотеку

@@ -120,6 +120,9 @@ CurvePreferenceLoop:
serverCipher, _ = hs.prepareCipher(handshakeCtx, hs.masterSecret, "server application traffic secret")
c.out.setCipher(c.vers, serverCipher)

if c.hand.Len() > 0 {
return c.sendAlert(alertUnexpectedMessage)
}
if hs.hello13Enc.earlyData {
c.in.setCipher(c.vers, earlyClientCipher)
c.phase = readingEarlyData
@@ -162,6 +165,9 @@ func (hs *serverHandshakeState) readClientFinished13() error {
hs.finishedHash13.Write(clientFinished.marshal())

c.hs = nil // Discard the server handshake state
if c.hand.Len() > 0 {
return c.sendAlert(alertUnexpectedMessage)
}
c.in.setCipher(c.vers, hs.appClientCipher)
c.in.traceErr, c.out.traceErr = nil, nil
c.phase = handshakeConfirmed
@@ -224,6 +230,10 @@ func (c *Conn) handleEndOfEarlyData() {
return
}
c.phase = waitingClientFinished
if c.hand.Len() > 0 {
c.in.setErrorLocked(c.sendAlert(alertUnexpectedMessage))
return
}
c.in.setCipher(c.vers, c.hs.hsClientCipher)
}



+ 3
- 0
handshake_server.go Прегледај датотеку

@@ -132,6 +132,9 @@ func (c *Conn) serverHandshake() error {
return err
}
}
if c.hand.Len() > 0 {
return c.sendAlert(alertUnexpectedMessage)
}
c.phase = handshakeConfirmed
atomic.StoreInt32(&c.handshakeConfirmed, 1)
c.handshakeComplete = true


Loading…
Откажи
Сачувај