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

Nell'implementazione della funzione di hash crittografico SHA-3 (Keccak), proposta nel pacchetto XKCP (eXtended Keccak Code Package), è stata rilevata una vulnerabilità (CVE-2022-37454) che può portare a un buffer overflow durante l'elaborazione di dati formattati in modo specifico. Il problema è causato da un errore nel codice della specifica implementazione di SHA-3 e non da una vulnerabilità nell'algoritmo stesso. Il pacchetto XKCP è presentato come l'implementazione ufficiale di SHA-3, sviluppato con la partecipazione del team di sviluppatori di Keccak e utilizzato come base nelle funzioni per lavorare con SHA-3 in vari linguaggi di programmazione (ad esempio, il codice XKCP è utilizzato nel modulo hashlib di Python, nel pacchetto digest-sha3 di Ruby e nelle funzioni hash_* di PHP).

Secondo il ricercatore che ha segnalato il problema, è stato in grado di sfruttare la vulnerabilità per compromettere le proprietà crittografiche della funzione di hash e trovare il primo e il secondo preimaging, oltre a definire collisioni. Inoltre, è stato dichiarato di aver creato un prototipo di exploit che consente l'esecuzione di codice durante il calcolo dell'hash di un file appositamente formattato. Potenzialmente, la vulnerabilità potrebbe anche essere utilizzata per attacchi su algoritmi di verifica delle firme digitali che utilizzano SHA-3 (ad esempio, Ed448). Dettagli sui metodi di attacco verranno pubblicati in seguito, dopo la completa eliminazione della vulnerabilità.

Non è ancora chiaro quanto la vulnerabilità influisca praticamene sulle applicazioni esistenti, poiché per manifestare il problema nel codice è necessario applicare il calcolo ciclico ossia hash dei blocchi e uno dei blocchi elaborati deve avere una dimensione di circa 4 GB (almeno 2^32 - 200 byte). Il problema non si manifesta quando si elaborano i dati in una volta (senza calcolo sequenziale dell'hash per parti). Come metodo di protezione più semplice, si suggerisce di limitare la dimensione massima dei dati coinvolti in una singola iterazione di calcolo dell'hash.

La vulnerabilità è causata da un errore nell'elaborazione a blocchi dei dati in input. A causa di un confronto errato dei valori di tipo "int", viene determinata in modo errato la dimensione dei dati in attesa di elaborazione, portando alla scrittura della coda oltre il buffer allocato. In particolare, durante il confronto è stata utilizzata l'espressione "partialBlock + instance->byteIOIndex", che per grandi valori delle componenti portava a un overflow intero. Inoltre, nel codice era presente un cast di tipo errato "(unsigned int)(dataByteLen - i)" che portava a un overflow sui sistemi con un tipo size_t a 64 bit.

Esempio di codice che porta all'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

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster