Ευπάθεια στη βιβλιοθήκη με την κύρια υλοποίηση του αλγορίθμου SHA-3

Έχει εντοπιστεί μια ευπάθεια (CVE-3-2022) στην υλοποίηση της συνάρτησης κατακερματισμού κρυπτογράφησης SHA-37454 (Keccak) που προσφέρεται στο πακέτο XKCP (eXtended Keccak Code Package), η οποία μπορεί να οδηγήσει σε υπερχείλιση buffer κατά την επεξεργασία ορισμένων μορφοποιημένα δεδομένα. Το πρόβλημα προκαλείται από ένα σφάλμα στον κώδικα μιας συγκεκριμένης υλοποίησης του SHA-3 και όχι από μια ευπάθεια στον ίδιο τον αλγόριθμο. Το πακέτο XKCP διαφημίζεται ως η επίσημη υλοποίηση του SHA-3, που αναπτύχθηκε με τη συμβολή της ομάδας ανάπτυξης Keccak και χρησιμοποιείται ως βάση για τις λειτουργίες SHA-3 σε διάφορες γλώσσες προγραμματισμού (π.χ., ο κώδικας XKCP χρησιμοποιείται στο hashlib της Python ενότητα, οι λειτουργίες του πακέτου Ruby digest sha3 και PHP hash_*).

Σύμφωνα με τον ερευνητή που εντόπισε το πρόβλημα, μπόρεσε να χρησιμοποιήσει την ευπάθεια για να παραβιάσει τις κρυπτογραφικές ιδιότητες της συνάρτησης κατακερματισμού και να βρει την πρώτη και τη δεύτερη προεικόνα, καθώς και να εντοπίσει συγκρούσεις. Επιπλέον, ανακοινώθηκε ότι θα δημιουργηθεί ένα πρωτότυπο exploit που θα επιτρέπει την εκτέλεση κώδικα κατά τον υπολογισμό του κατακερματισμού ενός ειδικά σχεδιασμένου αρχείου. Η ευπάθεια θα μπορούσε επίσης να χρησιμοποιηθεί για επίθεση σε αλγόριθμους επαλήθευσης ψηφιακής υπογραφής που χρησιμοποιούν SHA-3 (για παράδειγμα, Ed448). Λεπτομέρειες για τις μεθόδους επίθεσης σχεδιάζεται να δημοσιευτούν αργότερα, αφού η ευπάθεια έχει εξαλειφθεί παντού.

Δεν είναι ακόμη σαφές πόσο η ευπάθεια επηρεάζει τις υπάρχουσες εφαρμογές στην πράξη, καθώς για να εκδηλωθεί το πρόβλημα στον κώδικα, πρέπει να χρησιμοποιηθούν κυκλικοί υπολογισμοί κατακερματισμού σε μπλοκ και ένα από τα επεξεργασμένα μπλοκ πρέπει να έχει μέγεθος περίπου 4 GB (τουλάχιστον 2^32 - 200 byte). Κατά την επεξεργασία των δεδομένων εισόδου ταυτόχρονα (χωρίς διαδοχικό υπολογισμό του κατακερματισμού σε μέρη), το πρόβλημα δεν εμφανίζεται. Ως η απλούστερη μέθοδος προστασίας, προτείνεται ο περιορισμός του μέγιστου μεγέθους των δεδομένων που εμπλέκονται σε μία επανάληψη του υπολογισμού κατακερματισμού.

Η ευπάθεια προκαλείται από ένα σφάλμα κατά την επεξεργασία μπλοκ των δεδομένων εισόδου. Λόγω λανθασμένης σύγκρισης τιμών με τον τύπο "int", προσδιορίζεται το λανθασμένο μέγεθος των δεδομένων σε εκκρεμότητα, γεγονός που οδηγεί στην εγγραφή της ουράς πέρα ​​από το εκχωρημένο buffer. Συγκεκριμένα, η σύγκριση χρησιμοποίησε την έκφραση «partialBlock + instance->byteIOIndex», η οποία οδήγησε σε υπερχείλιση ακεραίων για μεγάλες τιμές των συστατικών μερών. Επιπλέον, υπήρχε μια εσφαλμένη μετάδοση τύπου "(unsigned int)(dataByteLen - i)" στον κώδικα, η οποία προκάλεσε υπερχείλιση σε συστήματα με τύπο size_t 64 bit.

Παράδειγμα κώδικα που προκαλεί υπερχείλιση: εισαγωγή hashlib h = hashlib.sha3_224() m1 = b"\x00" * 1; m2 = b"\x00″ * 4294967295; h.update(m1) h.update(m2) print(h.hexdigest())

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο