Heartbleed: durata del messaggio heatbeat?

3

Qual è la lunghezza giusta del messaggio heartbeat tra 2 ^ 14 e 2 ^ 16 ?

Il link RFC dice che

The total length of a HeartbeatMessage MUST NOT exceed 2^14 or
max_fragment_length when negotiated as defined in [RFC6066].

In questo PoC Heartbleed la dimensione è 40 00 in esadecimale quindi 16 384 - > 2 ^ 14

Ma se controllo queste spiegazioni (due da molte):

link link

Quindi la lunghezza massima è 65 535 - > 2 ^ 16

EDIT SOLVED?

Eseguo il test del codice PoC Heartbleed, il codice hb è:

hb = h2bin('''
18 03 02 00 03
01 40 00
''')

40 00 - > 16 384 - > 2 ^ 14

Se stampo la lunghezza ricevuta, mostra 16 384

Se sostituisco 40 00 di FF FF - > 2 ^ 16, la lunghezza dei dati ricevuti è ancora 16 384 quattro volte.

16 384
16 384
16 384
16 384

= > 2 ^ 16

Interessante

Quindi il massimo è 2 ^ 16 ma sarà diviso in pacchetti di lunghezza 2 ^ 14

    
posta mpgn 08.03.2015 - 19:30
fonte

1 risposta

1

La dimensione massima di un HeartbeatMessage (incluso padding, ecc.) è 2 ^ 14 per RFC 6520 sez. 4 come hai sottolineato.

OpenSSL tuttavia aveva un problema di implementazione che non controllava correttamente questo limite (e consentendo valori fino alla dimensione massima di un intero a 16 bit, ovvero circa 2 ^ 16 ). Il risultato è noto come bug "Heartbleed". Vedi questo commit OpenSSL per la correzione che aggiunge il controllo del contorno mancante .

Se ti stai chiedendo perché impostare la lunghezza del payload su 0xFFFF non porti a una singola risposta di circa 2 ^ 16 byte, questo è dovuto al fatto che la dimensione massima per un TLSPlainText non deve superare 2 ^ 14 che viene applicata anche in OpenSSL. (Per una spiegazione dettagliata sul formato esatto di un messaggio Heartbeat creato, vedere questi commenti del pacemaker PoC .)

    
risposta data 09.03.2015 - 02:21
fonte

Leggi altre domande sui tag