Qualys Company
Το πρόβλημα προκαλείται από ένα σφάλμα στον κώδικα που παραδίδει την αλληλογραφία στον απομακρυσμένο διακομιστή αλληλογραφίας (όχι στον κώδικα που χειρίζεται τις εισερχόμενες συνδέσεις). Η επίθεση είναι δυνατή τόσο από την πλευρά του πελάτη όσο και από την πλευρά του διακομιστή. Από την πλευρά του πελάτη, η επίθεση είναι δυνατή στην προεπιλεγμένη διαμόρφωση του OpenSMTPD, στην οποία το OpenSMTPD δέχεται αιτήματα μόνο στην εσωτερική διεπαφή δικτύου (localhost) και στέλνει μηνύματα αλληλογραφίας σε εξωτερικούς διακομιστές. Για να εκμεταλλευτεί την ευπάθεια, αρκεί, κατά την παράδοση μιας επιστολής, το OpenSMTPD να δημιουργήσει μια περίοδο λειτουργίας με έναν διακομιστή αλληλογραφίας που ελέγχεται από τον εισβολέα ή ο εισβολέας να μπορεί να σφηνώσει στη σύνδεση πελάτη (MITM ή ανακατεύθυνση κατά τη διάρκεια επιθέσεων μέσω DNS ή BGP ).
Για επίθεση από την πλευρά του διακομιστή, το OpenSMTPD πρέπει να ρυθμιστεί ώστε να λαμβάνει αιτήματα εξωτερικού δικτύου από άλλους διακομιστές αλληλογραφίας ή να εξυπηρετεί υπηρεσίες τρίτων που σας επιτρέπουν να στείλετε ένα αίτημα σε ένα αυθαίρετο email (για παράδειγμα, φόρμες επιβεβαίωσης διεύθυνσης σε ιστότοπους). Για παράδειγμα, ένας εισβολέας μπορεί να συνδεθεί στον διακομιστή OpenSMTPD και να στείλει ένα λανθασμένο γράμμα (σε έναν ανύπαρκτο χρήστη), το οποίο θα οδηγήσει σε μια απάντηση στέλνοντας μια επιστολή με κωδικό σφάλματος (αναπήδηση) στον διακομιστή του εισβολέα. Ένας εισβολέας μπορεί να εκμεταλλευτεί την ευπάθεια όταν το OpenSMTPD συνδέεται για να παραδώσει μια ειδοποίηση στον διακομιστή του εισβολέα. Οι εντολές φλοιού που εισάγονται κατά τη διάρκεια της επίθεσης τοποθετούνται σε ένα αρχείο που εκτελείται με δικαιώματα ρίζας κατά την επανεκκίνηση του OpenSMTPD, επομένως ο εισβολέας πρέπει να περιμένει να επανεκκινήσει το OpenSMTPD ή να ξεκινήσει ένα σφάλμα του OpenSMTPD για να ολοκληρώσει την επίθεση.
Το πρόβλημα υπάρχει στη συνάρτηση mta_io() στον κώδικα για την ανάλυση της απόκρισης πολλαπλών γραμμών που επιστρέφεται από τον απομακρυσμένο διακομιστή μετά τη δημιουργία μιας σύνδεσης (για παράδειγμα, "250-ENHANCEDSTATUSCODES" και "250 HELP"). Το OpenSMTPD υπολογίζει ότι η πρώτη γραμμή περιλαμβάνει έναν τριψήφιο αριθμό και κείμενο που χωρίζονται με χαρακτήρα "-" και η δεύτερη γραμμή περιέχει έναν τριψήφιο αριθμό και κείμενο που χωρίζονται με κενό. Εάν ένας τριψήφιος αριθμός δεν ακολουθείται από κενό και κείμενο στη δεύτερη γραμμή, ο δείκτης που χρησιμοποιείται για τον ορισμό του κειμένου ορίζεται στο byte που ακολουθεί τον χαρακτήρα '\0' και γίνεται προσπάθεια αντιγραφής των δεδομένων μετά το τέλος της γραμμής στο buffer.
Κατόπιν αιτήματος του έργου OpenBSD, η δημοσίευση λεπτομερειών σχετικά με την εκμετάλλευση της ευπάθειας έχει καθυστερήσει μέχρι τις 26 Φεβρουαρίου για να επιτραπεί στους χρήστες να ενημερώσουν τα συστήματά τους. Το πρόβλημα υπάρχει στη βάση κώδικα από τον Δεκέμβριο του 2015, αλλά η εκμετάλλευση πριν από την εκτέλεση κώδικα με δικαιώματα root ήταν δυνατή από τον Μάιο του 2018. Οι ερευνητές ετοίμασαν ένα λειτουργικό πρωτότυπο του exploit, το οποίο δοκιμάστηκε με επιτυχία σε εκδόσεις OpenSMTPD για OpenBSD 6.6, OpenBSD 5.9, Debian 10, Debian 11 (δοκιμή) και Fedora 31.
Στο OpenSMTPD επίσης
Το πρόβλημα είναι συνέπεια της ατελούς εξάλειψης
Αξίζει να σημειωθεί ότι στο Fedora 31 η ευπάθεια σάς επιτρέπει να αποκτήσετε αμέσως τα προνόμια της ομάδας ρίζας, αφού η διαδικασία smtpctl είναι εξοπλισμένη με τη σημαία setgid root, αντί για τη σημαία setgid smtpq. Αποκτώντας πρόσβαση στην ομάδα ρίζας, μπορείτε να αντικαταστήσετε τα περιεχόμενα του /var/lib/sss/mc/passwd και να αποκτήσετε πλήρη πρόσβαση root στο σύστημα.
Πηγή: opennet.ru