Η αρχιτεκτονική ρίζα του προβλήματος
Η ευπάθεια, που ονομάστηκε «Sshhole», αποτελεί ένα κλασικό παράδειγμα αποτυχίας διαλειτουργικότητας (interoperability) μεταξύ συστημικών βιβλιοθηκών. Από το 2012, η βιβλιοθήκη musl επέλεξε να επιστρέφει τον χαρακτήρα * αντί για NULL όταν η συνάρτηση crypt() αποτυγχάνει. Στο Unix, ο αστερίσκος στο πεδίο του κωδικού πρόσβασης στο /etc/shadow υποδηλώνει λογαριασμό που δεν επιτρέπεται να συνδεθεί με κωδικό.
Η σύγκρουση με το OpenSSH
Το πρόβλημα εντείνεται από τον μηχανισμό προστασίας του OpenSSH έναντι επιθέσεων χρονισμού. Όταν το sshd λαμβάνει μια προσπάθεια σύνδεσης για έναν ανύπαρκτο χρήστη ή έναν χρήστη με κλειδωμένο λογαριασμό, «δανείζεται» το salt ενός άλλου χρήστη για να εκτελέσει τον υπολογισμό του hash, ώστε να μην αποκαλύψει την ύπαρξη του λογαριασμού μέσω της διαφοράς στον χρόνο απόκρισης (latency).
Όταν ο χρήστης εισάγει έναν κωδικό πρόσβασης μεγαλύτερο από 256 χαρακτήρες, η musl απορρίπτει την επεξεργασία του για λόγους DoS προστασίας και επιστρέφει *. Το sshd συγκρίνει αυτό το * με το * που υπάρχει στο /etc/shadow του κλειδωμένου λογαριασμού, βρίσκει ταύτιση και επιτρέπει την πρόσβαση.
Εμβέλεια και μετριασμός κινδύνου
Η ευπάθεια αφορά συστήματα που:
- Χρησιμοποιούν
musl(π.χ. Alpine Linux, OpenWrt). - Δεν χρησιμοποιούν PAM για τον έλεγχο ταυτότητας.
- Έχουν ενεργοποιημένο το
PasswordAuthentication.
Οι διαχειριστές συστημάτων πρέπει να προχωρήσουν άμεσα σε αναβάθμιση του πακέτου openssh. Εάν η αναβάθμιση δεν είναι εφικτή, η επιβεβλημένη λύση είναι η απενεργοποίηση της αυθεντικοποίησης με κωδικό πρόσβασης στο αρχείο ρυθμίσεων του sshd (PasswordAuthentication no), προωθώντας αποκλειστικά τη χρήση κλειδιών SSH.