Πριν από λίγες ημέρες , συνέβη ένα ασυνήθιστο περιστατικό που συγκλόνισε την κοινότητα του πυρήνα του Linux: Ο Linus Torvalds διέταξε τον άμεσο αποκλεισμό του λογαριασμού του Kees Cook στο kernel.org, μετά τον εντοπισμό χειραγωγημένων commits στο αποθετήριο Git αυτού του προγραμματιστή.
Ο Kees Cook, αναγνωρισμένος για την ηγεσία του στην ομάδα ασφαλείας του Ubuntu και για τη διατήρηση περισσότερων από δώδεκα υποσυστημάτων που σχετίζονται με την ασφάλεια του πυρήνα, απαγορεύτηκε προσωρινά να υποβάλλει αλλαγές μέχρι να διευκρινιστούν τα γεγονότα.
Τροποποίηση της συγγραφής και των υπογραφών στο αποθετήριο Kees Cook
Το πρόβλημα προέκυψε από ένα αίτημα ενσωμάτωσης αλλαγών στον κλάδο πυρήνα 6.16, στον οποίο ο Linus εντόπισε αναφορές σε ένα αποθετήριο που περιείχε χειραγωγημένες υποβολές με το όνομά του να αναφέρεται ως συγγραφέας και επιβεβαιωτής, παρά το γεγονός ότι δεν τις είχε κάνει ο ίδιος. Ένα από τα πιο σοβαρά παραδείγματα ήταν η ύπαρξη μιας διπλότυπης υποβολής, πανομοιότυπης σε περιεχόμενο με την αρχική αλλά με διαφορετικό hash SHA1, η οποία περιελάμβανε ψευδώς την υπογραφή του Linus Torvalds.
Αυτές οι αλλαγές δεν θα μπορούσαν να αποδοθούν απλώς σε ένα τυχαίο σφάλμα κατά τη διάρκεια μιας λειτουργίας git rebase, καθώς περιελάμβαναν την τεράστια τροποποίηση ευαίσθητων πληροφοριών, συμπεριλαμβανομένων περισσότερων από 6.000 ξαναγραμμένων commits, 330 από τις οποίες έφεραν το όνομα του Linus ως δημιουργού.
Η αντίδραση του Τόρβαλντς: υποψίες για σκόπιμη χειραγώγηση
Ο Linus Torvalds δεν έκρυψε την ανησυχία του και περιέγραψε τα γεγονότα ως δυνητικά κακόβουλα:
«Μία ή δύο επανεγγραφές θα μπορούσαν να είναι λάθος. Αλλά χιλιάδες από αυτές, πολλές με πλαστογραφημένη την υπογραφή μου, δεν είναι», δήλωσε.
Δεδομένου του μεγέθους των αλλαγών και του κινδύνου για την ακεραιότητα του επίσημου δέντρου πυρήνα, ο Torvalds ζήτησε από τον Konstantin Ryabitsev, διαχειριστή της υποδομής kernel.org, να μπλοκάρει την πρόσβαση του Kees Cook μέχρι να διευκρινιστεί η κατάσταση.
Απαντώντας, ο Kees Cook εξήγησε ότι πρόσφατα αντιμετώπισε τεχνικά προβλήματα που ενδέχεται να προκάλεσαν το περιστατικό. Δήλωσε ότι ο SSD του δυσλειτουργούσε κατά τη διάρκεια των εργασιών αντιγραφής, γεγονός που είχε ως αποτέλεσμα την καταστροφή πολλών αποθετηρίων. Μετά από αυτά τα σφάλματα, προσπάθησε να επαναφέρει την κατάσταση του αποθετηρίου του χρησιμοποιώντας το `git rebase` και διάφορα εργαλεία αυτοματισμού.
Ωστόσο, αυτές οι λειτουργίες εκτελέστηκαν σε κρίσιμους κλάδους , όπως οι for-next/hardening και for-linus/hardening, κάτι που οδήγησε σε τυχαία τροποποίηση του ιστορικού του αποθετηρίου, συμπεριλαμβανομένων αλλαγών στην ιδιότητα του δημιουργού της υποβολής. Παρά την εξήγησή του, ο Linus παρέμεινε επιφυλακτικός.
«Δεν καταλαβαίνω πώς θα μπορούσε να συμβεί μια τυχαία προσπέραση, πόσο μάλλον με τόσο μεγάλο όγκο αλλαγών.»
Ο πραγματικός ένοχος: τα τρέιλερ git-filter-repo και b4
Σε ένα επόμενο μήνυμα, ο Kees Cook προσδιόρισε την πιθανή πηγή του σφάλματος : τη συνδυασμένη χρήση δύο εργαλείων, του git-filter-repo και των b4 trailers, τα οποία χειρίζονται το ιστορικό υποβολών και τα trailers (ετικέτες όπως Signed-off-by:) στις υποβολές.
Αυτή η κακή χρήση των βοηθητικών προγραμμάτων θα είχε προκαλέσει την αυτόματη επανεγγραφή χιλιάδων commits , συμπεριλαμβανομένης της αντικατάστασης του author με την προεπιλεγμένη τιμή (στην προκειμένη περίπτωση, τον Linus Torvalds), χωρίς ο Kees να παρατηρήσει το σφάλμα εκείνη τη στιγμή . Ο Konstantin Ryabitsev, συγγραφέας του εργαλείου b4, επιβεβαίωσε αυτή τη θεωρία και υποστήριξε ότι δεν υπήρχε κακόβουλη πρόθεση από την πλευρά του Cook. Στην πραγματικότητα, το σύστημα ήδη δημιουργούσε προειδοποιήσεις που αγνοήθηκαν.
Αφού διευκρινίστηκε η κατάσταση, η πρόσβαση του Kees Cook στο kernel.org αποκαταστάθηκε. Ως προληπτικό μέτρο, ανακοινώθηκε ότι το εργαλείο b4 θα περιλαμβάνει έναν νέο έλεγχο ασφαλείας, ο οποίος θα αποτρέπει την τροποποίηση commits των οποίων η συγγραφή δεν ταιριάζει με την ταυτότητα του τρέχοντος χρήστη. Αυτό στοχεύει στην αποτροπή παρόμοιων σφαλμάτων και στην προστασία της ακεραιότητας του πηγαίου κώδικα του πυρήνα.
Ο Kees, από την πλευρά του, δεσμεύτηκε να αναδημιουργήσει τους επηρεαζόμενους κλάδους από μεμονωμένες ενημερώσεις κώδικα και να αναλύσει διεξοδικά τα βήματα που οδήγησαν στο σφάλμα. Παρόλο που το περιστατικό έχει τεταμένες σχέσεις εντός της ομάδας ανάπτυξης του πυρήνα, έχει επίσης τονίσει τη σημασία της χρήσης εργαλείων επανεγγραφής ιστορικού με προσοχή, ειδικά σε έργα τόσο κρίσιμα όσο ο πυρήνας του Linux.
Τέλος, αξίζει να αναφερθεί ότι αυτό το περιστατικό μεταξύ του Linus Torvalds και του Kees Cook χρησιμεύει ως προειδοποίηση για τους κινδύνους της χειραγώγησης του ιστορικού των υποβολών και ότι χάρη στην ταχεία παρέμβαση της ομάδας kernel.org και τη διαφάνεια της διαδικασίας, η κατάσταση έχει τεθεί υπό έλεγχο.
Τέλος, αν ενδιαφέρεστε να μάθετε περισσότερα, μπορείτε να βρείτε τις λεπτομέρειες στον παρακάτω σύνδεσμο.