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

ευπάθεια

Εάν γίνουν αντικείμενο εκμετάλλευσης, αυτά τα ελαττώματα μπορούν να επιτρέψουν στους εισβολείς να αποκτήσουν μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητες πληροφορίες ή γενικά να προκαλέσουν προβλήματα

Εντοπίστηκε μια ευπάθεια (αναφέρεται ήδη στο CVE-2022-37454) en την υλοποίηση της κρυπτογραφικής συνάρτησης κατακερματισμού SHA-3 (Keccak), προσφέρεται στο πακέτο XKCP (eXtended Keccak Code Package).

Η αναγνωρισμένη ευπάθεια μπορεί να προκαλέσει υπερχείλιση buffer κατά την επεξεργασία των διαμορφωμένων δεδομένων. Το πρόβλημα οφείλεται σε σφάλμα στον κώδικα μιας συγκεκριμένης υλοποίησης του SHA-3, όχι σε ευπάθεια στον ίδιο τον αλγόριθμο.

El paquete XKCP διαφημίζεται ως η επίσημη εφαρμογή του SHA-3, που αναπτύχθηκε με τη βοήθεια της ομάδας ανάπτυξης Keccak και χρησιμοποιείται ως βάση για λειτουργίες που λειτουργούν με το SHA-3 σε διάφορες γλώσσες προγραμματισμού (για παράδειγμα, ο κώδικας XKCP χρησιμοποιείται στη μονάδα hashlib της Python, στο πακέτο Ruby digest-sha3 και στις συναρτήσεις PHP hash_*).

Σύμφωνα με τον ερευνητή που εντόπισε το πρόβλημα, θα μπορούσε να χρησιμοποιήσει την ευπάθεια για να παραβιάσει τις κρυπτογραφικές ιδιότητες της συνάρτησης κατακερματισμού και βρείτε την πρώτη και τη δεύτερη προεικόνα, καθώς και τον προσδιορισμό των συγκρούσεων.

Ο λόγος για το σφάλμα τμηματοποίησης είναι ότι τα σενάρια θα προσπαθήσουν να γράψουν περισσότερα δεδομένα σε ένα buffer από όσα μπορεί να χωρέσει. Μια τέτοια ευπάθεια είναι γνωστή ως υπερχείλιση buffer, την οποία η OWASP περιγράφει ως "πιθανώς την πιο γνωστή μορφή ευπάθειας ασφαλείας λογισμικού".

Μια μικρή παραλλαγή του κώδικα θα προκαλέσει έναν άπειρο βρόχο: απλώς αντικαταστήστε το 4294967295 με το 4294967296. Σημειώστε την ομοιότητα με το CVE-2019-8741, μια άλλη ευπάθεια που διαπίστωσα ότι επηρέασε το υλικολογισμικό περισσότερων από 1.400 δισεκατομμυρίων συσκευών Apple, η οποία επίσης προκάλεσε έναν άπειρο βρόχο.

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

Αυτό το είδος συμπεριφοράς δεν υποτίθεται ότι συμβαίνει σε "ασφαλείς" γλώσσες όπως η Python και η PHP, καθώς ελέγχουν ότι όλες οι λειτουργίες ανάγνωσης και εγγραφής βρίσκονται εντός των ορίων buffer. Ωστόσο, το πρόβλημα είναι ότι η ευπάθεια είναι παρούσα στην υποκείμενη "ανασφαλή" γλώσσα C...

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

Κατά την επεξεργασία των δεδομένων εισόδου ταυτόχρονα (χωρίς διαδοχικό υπολογισμό του κατακερματισμού ανά μέρη), το πρόβλημα δεν εμφανίζεται. Ως απλούστερη μέθοδος προστασίας, προτείνεται ο περιορισμός του μέγιστου μεγέθους των δεδομένων που εμπλέκονται σε μία επανάληψη του υπολογισμού κατακερματισμού.

Ο κώδικας ευπάθειας δημοσιεύτηκε τον Ιανουάριο του 2011, επομένως χρειάστηκε πάνω από μια δεκαετία για να βρεθεί αυτή η ευπάθεια. Φαίνεται ότι είναι δύσκολο να βρεθούν τρωτά σημεία σε κρυπτογραφικές υλοποιήσεις, παρόλο που παίζουν κρίσιμο ρόλο στη συνολική ασφάλεια ενός συστήματος. (Ίσως οι άνθρωποι να μην ψάχνουν καν για τέτοια τρωτά σημεία, καθώς ούτε αυτή η ευπάθεια στο XKCP ούτε η ευπάθεια της Apple που αναφέρθηκε παραπάνω είναι επιλέξιμες για προγράμματα επιβράβευσης σφαλμάτων!)

Τρωτό οφείλεται σε σφάλμα κατά την επεξεργασία μπλοκ των δεδομένων εισόδου. Λόγω λανθασμένης σύγκρισης των τιμών με τον τύπο "int", προσδιορίζεται ένα λανθασμένο μέγεθος των εκκρεμών δεδομένων, το οποίο προκαλεί τη διαγραφή της ουράς από το εκχωρημένο buffer.

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

Τελικά αν ενδιαφέρεστε να μάθετε περισσότερα γι 'αυτό, μπορείτε να ελέγξετε τις λεπτομέρειες στο παρακάτω σύνδεσμο.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: AB Internet Networks 2008 SL
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.