Quindi sono stato googlato su questa cosa a cuore aperto di OpenSSL e in qualche modo vedo che è causato dall'estensione del battito cardiaco che richiede al client di eseguire il ping del server per mostrare la sua vitalità e tutto viene a questa funzione memcpy in C che si intende per copiare dalla matrice di origine alla matrice di destinazione con la dimensione specificata dall'utente.
Se la dimensione era una bugia (il che significa che la fonte contiene un byte minore rispetto alla dimensione) allora memcpy catturerà la memoria arbitraria intorno e assegnata alla destinazione e in questo caso rimanderà al client ...
Riferimento: Anatomia dell'Heartbleed di OpenSSL: solo quattro byte attivano l'horror bug
payload
is controlled by the attacker, and it's quite large at 64KB. If the actualHeartbeatMessage
sent by the attacker only has a payload of, say, one byte, and its payload_length is a lie, then the abovememcpy()
will read beyond the end of the receivedHeartbeatMessage
and start reading from the victim process's memory...
Se la mia comprensione di cui sopra è corretta, allora ho una domanda qui forse ingenua, perché dobbiamo fare array (char array qui) copiando qui? Non possiamo semplicemente passare il char array sorgente che il client ci ha inviato?
vale a dire. Se mi mandi
function(char[] array)
Quindi dovrei semplicemente rimandare quella stessa matrice
send(array)