Il modo in cui l'ho fatto è copiando l'implementazione SSL_write e modificando manualmente il padding dopo la crittografia. SSL_write usa altre funzioni non pubbliche (da un paio di file) e poche macro, anche quelle devono essere copiate. L'implementazione corretta del protocollo TLS deve controllare la dimensione del padding e tutti i byte devono essere impostati sullo stesso valore (per impostazione predefinita sono gli zero in OpenSSL). Le implementazioni vulnerabili di Poodle TLS non controllano il contenuto o le dimensioni del padding. Quindi ho appena aggiunto un ulteriore blocco con garbage to padding esistente nella funzione di crittografia. Se l'implementazione TLS non è vulnerabile, il server interrompe la connessione o procede se è vulnerabile.
// increase padding size
i += bs;
// fill padding with junk to test TLS protocol compliance
for(size_t j = 0; j < i; ++j) {
rec->input[rec->length + j] = rand() % 256;
}
rec->length += i;
rec->input[l - 1] = (i - 1);