Vulnerabilità nella libreria con l'implementazione principale dell'algoritmo SHA-3

È stata identificata una vulnerabilità (CVE-3-2022) nell'implementazione della funzione di hash crittografico SHA-37454 (Keccak) offerta nel pacchetto XKCP (eXtended Keccak Code Package), che può portare ad un buffer overflow durante l'elaborazione di alcuni dati formattati. Il problema è causato da un bug nel codice di una specifica implementazione di SHA-3 e non da una vulnerabilità nell'algoritmo stesso. Il pacchetto XKCP è pubblicizzato come l'implementazione ufficiale di SHA-3, sviluppato con il contributo del team di sviluppo Keccak e utilizzato come base per le funzioni SHA-3 in vari linguaggi di programmazione (ad esempio, il codice XKCP viene utilizzato nell'hashlib Python modulo Ruby digest sha3 e le funzioni PHP hash_*).

Secondo il ricercatore che ha individuato il problema, è riuscito a sfruttare la vulnerabilità per violare le proprietà crittografiche della funzione hash e trovare la prima e la seconda preimmagine, oltre a rilevare le collisioni. Inoltre, è stato annunciato che sarebbe stato creato un prototipo di exploit che avrebbe consentito l'esecuzione del codice durante il calcolo dell'hash di un file appositamente progettato. La vulnerabilità potrebbe anche essere potenzialmente utilizzata per attaccare algoritmi di verifica della firma digitale che utilizzano SHA-3 (ad esempio Ed448). Si prevede che i dettagli sui metodi di attacco verranno pubblicati in seguito, dopo che la vulnerabilità sarà stata eliminata ovunque.

Non è ancora chiaro quanto la vulnerabilità colpisca nella pratica le applicazioni esistenti, poiché affinché il problema si manifesti nel codice è necessario utilizzare calcoli ciclici di hash in blocchi e uno dei blocchi elaborati deve avere una dimensione di circa 4 GB (almeno 2^32 - 200 byte). Quando si elaborano i dati di input contemporaneamente (senza calcolare in sequenza l'hash in parti), il problema non si presenta. Come metodo di protezione più semplice, si propone di limitare la dimensione massima dei dati coinvolti in un'iterazione del calcolo dell'hash.

La vulnerabilità è causata da un errore nel blocco dell'elaborazione dei dati di input. A causa di un confronto errato dei valori con il tipo "int", viene determinata la dimensione errata dei dati in sospeso, il che porta alla scrittura della coda oltre il buffer allocato. In particolare nel confronto è stata utilizzata l’espressione “partialBlock + istanza->byteIOIndex”, che ha portato a un overflow di numeri interi per grandi valori delle parti costitutive. Inoltre, nel codice era presente un cast di tipo errato "(unsigned int)(dataByteLen - i)" che causava un overflow sui sistemi con un tipo size_t a 64 bit.

Codice di esempio che causa l'overflow: import hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00″ * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Fonte: opennet.ru

Aggiungi un commento