Ho letto molte segnalazioni del bug HeartBleed ma non sono riuscito a trovare una descrizione a livello di codice sorgente, come questa per goto errore di fail . Qualcuno può fornire, o indicare, una tale spiegazione?
Ho letto molte segnalazioni del bug HeartBleed ma non sono riuscito a trovare una descrizione a livello di codice sorgente, come questa per goto errore di fail . Qualcuno può fornire, o indicare, una tale spiegazione?
Il blog existentialize ha fatto una semplice riscrittura facile da leggere.
Le basi sono:
unsigned char *buffer, *bp;
int r;
/* Allocate memory for the response, size is 1 byte
* message type, plus 2 bytes payload length, plus
* payload, plus padding
*/
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;
Assegna ciò che il richiedente ha richiesto. Senza azzerarlo.
/* Enter response type, length and copy payload */
*bp++ = TLS1_HB_RESPONSE;
s2n(payload, bp);
memcpy(bp, pl, payload);
Copia il payload del mittente per rimandarlo indietro.
Tranne che ... il mittente non ha inviato un payload.
Direttamente dal blog: "E se il richiedente non fornisse effettivamente byte di payload, come ha detto lei? Cosa sarebbe successo se pl fosse solo un byte?" Quindi la lettura da memcpy leggerà qualsiasi memoria fosse vicino al Record SSLv3 e all'interno dello stesso processo. "
Leggi altre domande sui tag openssl heartbleed