Ευπάθεια στο RubyGems.org, που επιτρέπει την αντικατάσταση πακέτων άλλων ατόμων

Εντοπίστηκε μια κρίσιμη ευπάθεια (CVE-2022-29176) στο αποθετήριο πακέτων RubyGems.org, το οποίο επιτρέπει, χωρίς την κατάλληλη εξουσιοδότηση, να αντικατασταθούν τα πακέτα άλλων ατόμων στο χώρο αποθήκευσης, ξεκινώντας ένα yank ενός νόμιμου πακέτου και φορτώνοντας στη θέση του άλλο αρχείο με το ίδιο όνομα και αριθμό έκδοσης.

Για την επιτυχή εκμετάλλευση της ευπάθειας, πρέπει να πληρούνται τρεις προϋποθέσεις:

  • Η επίθεση μπορεί να πραγματοποιηθεί μόνο σε πακέτα που έχουν παύλα στο όνομά τους.
  • Ένας εισβολέας πρέπει να μπορεί να τοποθετήσει ένα πακέτο πολύτιμων λίθων με μέρος του ονόματος πριν από τον χαρακτήρα παύλα. Για παράδειγμα, εάν η επίθεση είναι στο πακέτο "rails-html-sanitizer", ο εισβολέας πρέπει να τοποθετήσει το δικό του πακέτο "rails-html" στο αποθετήριο.
  • Το πακέτο που δέχεται επίθεση πρέπει να έχει δημιουργηθεί τις τελευταίες 30 ημέρες ή να μην έχει ενημερωθεί για 100 ημέρες.

Η ευπάθεια προκαλείται από ένα σφάλμα στον χειριστή ενεργειών "yank", ο οποίος ερμηνεύει το τμήμα του ονόματος μετά την παύλα ως το όνομα της πλατφόρμας, το οποίο κατέστησε δυνατή την έναρξη της διαγραφής ξένων πακέτων που ταιριάζουν με το τμήμα του ονόματος πριν από την παύλα. Συγκεκριμένα, στον κώδικα χειριστή "yank", η κλήση "find_by!(full_name: "#{rubygem.name}-#{slug}")" χρησιμοποιήθηκε για την εύρεση πακέτων, ενώ η παράμετρος "slug" μεταβιβάστηκε από το κάτοχος πακέτου για να καθορίσει την έκδοση που θα καταργηθεί. Ο κάτοχος του πακέτου "rails-html" θα μπορούσε να καθορίσει το "sanitizer-1.2.3" αντί για την έκδοση "1.2.3", το οποίο θα έκανε την πράξη να εφαρμοστεί στο πακέτο κάποιου άλλου "rails-html-sanitizer-1.2.3 ".

Το ζήτημα εντοπίστηκε από έναν ερευνητή ασφάλειας ως μέρος του προγράμματος επιβράβευσης του HackerOne για την εύρεση ζητημάτων ασφάλειας σε γνωστά έργα ανοιχτού κώδικα. Το πρόβλημα επιδιορθώθηκε στο RubyGems.org στις 5 Μαΐου και σύμφωνα με τους προγραμματιστές, δεν έχουν ακόμη εντοπίσει κανένα ίχνος εκμετάλλευσης της ευπάθειας στα αρχεία καταγραφής τους τελευταίους 18 μήνες. Ταυτόχρονα, μέχρι στιγμής έχει γίνει μόνο επιφανειακός έλεγχος και στο μέλλον προβλέπεται πιο εμπεριστατωμένος έλεγχος.

Για να ελέγξετε τα έργα σας, συνιστάται η ανάλυση του ιστορικού των λειτουργιών στο αρχείο Gemfile.lock· η κακόβουλη δραστηριότητα εκφράζεται παρουσία αλλαγών με διατήρηση του ονόματος και της έκδοσης ή αλλαγή πλατφόρμας (για παράδειγμα, όταν το gemname -Το πακέτο 1.2.3 ενημερώθηκε σε gemname-1.2.3-java). Ως λύση για την προστασία από την αντικατάσταση κρυφών πακέτων σε συστήματα συνεχούς ενοποίησης ή κατά τη δημοσίευση έργων, συνιστάται στους προγραμματιστές να χρησιμοποιούν το Bundler με τις επιλογές "-frozen" ή "-deployment" για τη διόρθωση εξαρτήσεων.

Πηγή: opennet.ru

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