Ευπάθεια απομακρυσμένης εκμετάλλευσης στον διακομιστή αλληλογραφίας qmail

Ερευνητές ασφαλείας από την Qualys έδειξε ευκαιρία εκμετάλλευση ευπάθειες στον διακομιστή αλληλογραφίας qmail, διάσημο το 2005 (CVE-2005-1513), αλλά παρέμεινε χωρίς επιδιόρθωση επειδή ο συγγραφέας του qmail υποστήριξε ότι δεν ήταν ρεαλιστικό να δημιουργηθεί ένα λειτουργικό exploit που θα μπορούσε να χρησιμοποιηθεί για επίθεση σε συστήματα στην προεπιλεγμένη διαμόρφωση. Η Qualys μπόρεσε να προετοιμάσει ένα exploit που αναιρεί αυτήν την υπόθεση και επιτρέπει σε κάποιον να ξεκινήσει την απομακρυσμένη εκτέλεση κώδικα στον διακομιστή στέλνοντας ένα ειδικά σχεδιασμένο μήνυμα.

Το πρόβλημα προκαλείται από μια υπερχείλιση ακέραιου αριθμού στη συνάρτηση stralloc_readyplus(), η οποία μπορεί να προκύψει κατά την επεξεργασία ενός πολύ μεγάλου μηνύματος. Η λειτουργία απαιτούσε ένα σύστημα 64-bit με περισσότερα από 4 GB εικονικής μνήμης. Όταν η ευπάθεια αναλύθηκε αρχικά το 2005, ο Daniel J. Bernstein υποστήριξε ότι η υπόθεση στον κώδικα ότι το μέγεθος του εκχωρημένου πίνακα είναι πάντα εντός της τιμής των 32 bit βασίζεται στο γεγονός ότι κανείς δεν παρέχει gigabyte μνήμης σε κάθε διεργασία. Τα τελευταία 15 χρόνια, τα συστήματα 64 bit σε διακομιστές έχουν αντικαταστήσει τα συστήματα 32 bit και η ποσότητα της παρεχόμενης μνήμης και το εύρος ζώνης δικτύου έχουν αυξηθεί δραματικά.

Οι συντηρητές πακέτων qmail έλαβαν υπόψη τη σημείωση του Bernstein και περιόρισαν τη διαθέσιμη μνήμη κατά την εκκίνηση της διαδικασίας qmail-smtpd (για παράδειγμα, στο Debian 10 το όριο έχει οριστεί στα 7MB). Αλλά οι μηχανικοί από την Qualys διαπίστωσαν ότι αυτό δεν είναι αρκετό και, εκτός από το qmail-smtpd, μπορεί να πραγματοποιηθεί μια απομακρυσμένη επίθεση στην τοπική διαδικασία qmail, η οποία παρέμεινε απεριόριστη σε όλα τα δοκιμασμένα πακέτα. Ως απόδειξη, ετοιμάστηκε ένα πρωτότυπο exploit που ήταν κατάλληλο για επίθεση στο πακέτο του Debian με το qmail στην προεπιλεγμένη διαμόρφωση.
Για να οργανώσει την απομακρυσμένη εκτέλεση κώδικα κατά τη διάρκεια μιας επίθεσης, ο διακομιστής απαιτεί 4 GB ελεύθερου χώρου στο δίσκο και 8 GB μνήμης RAM.
Το exploit σάς επιτρέπει να εκτελείτε οποιεσδήποτε εντολές φλοιού με τα δικαιώματα οποιουδήποτε χρήστη στο σύστημα, εκτός από χρήστες root και συστήματος που δεν έχουν δικό τους υποκατάλογο στον κατάλογο "/home" (η διαδικασία qmail-local εκκινείται με τα δικαιώματα του τοπικού χρήστη στον οποίο πραγματοποιείται η παράδοση).

Η επίθεση εκτελείται
μέσω της αποστολής ενός πολύ μεγάλου μηνύματος αλληλογραφίας, συμπεριλαμβανομένων πολλών γραμμών κεφαλίδας, μεγέθους περίπου 4 GB και 576 MB. Η επεξεργασία μιας τέτοιας συμβολοσειράς στο qmail-local έχει ως αποτέλεσμα μια υπερχείλιση ακέραιου αριθμού κατά την προσπάθεια παράδοσης ενός μηνύματος στον τοπικό χρήστη. Στη συνέχεια, μια υπερχείλιση ακέραιου αριθμού οδηγεί σε υπερχείλιση buffer κατά την αντιγραφή δεδομένων και τη δυνατότητα αντικατάστασης σελίδων μνήμης με κώδικα libc. Με τον χειρισμό της διάταξης των μεταδιδόμενων δεδομένων, είναι επίσης δυνατό να ξαναγραφεί η διεύθυνση της συνάρτησης «open()», αντικαθιστώντας τη με τη διεύθυνση της συνάρτησης «system()».

Στη συνέχεια, στη διαδικασία κλήσης της qmesearch() στο qmail-local, ανοίγει το αρχείο ".qmail-extension" μέσω της συνάρτησης open(), η οποία οδηγεί στην πραγματική εκτέλεση της συνάρτησης
system(".qmail-επέκταση"). Αλλά επειδή το τμήμα "επέκταση" του αρχείου δημιουργείται με βάση τη διεύθυνση του παραλήπτη (για παράδειγμα, "localuser-extension@localdomain"), οι εισβολείς μπορούν να κανονίσουν την αποστολή της εντολής για εκτέλεση καθορίζοντας τον χρήστη "localuser-;εντολή" ;@localdomain" ως παραλήπτης του μηνύματος.

Κατά την ανάλυση κώδικα, εντοπίστηκαν επίσης δύο τρωτά σημεία στην πρόσθετη ενημέρωση κώδικα qmail-verify, η οποία αποτελεί μέρος του πακέτου για το Debian. Πρώτη ευπάθεια (CVE-2020-3811) σας επιτρέπει να παρακάμψετε την επαλήθευση διεύθυνσης email και το δεύτερο (CVE-2020-3812) οδηγεί σε διαρροή τοπικών πληροφοριών. Συγκεκριμένα, η πρώτη ευπάθεια σάς επιτρέπει να παρακάμψετε την επαλήθευση της ορθότητας της διεύθυνσης που χρησιμοποιείται στο exploit για την αποστολή μιας εντολής (η επαλήθευση δεν λειτουργεί για διευθύνσεις χωρίς τομέα, όπως "localuser-;command;"). Η δεύτερη ευπάθεια μπορεί να χρησιμοποιηθεί για τον έλεγχο της παρουσίας αρχείων και καταλόγων στο σύστημα, συμπεριλαμβανομένων εκείνων που είναι προσβάσιμα μόνο στο root (εκτελέσματα qmail-verify με δικαιώματα root), μέσω απευθείας κλήσης στον τοπικό χειριστή.

Για να επιλύσετε το πρόβλημα, ο Bernstein συνέστησε την εκτέλεση διεργασιών qmail με συνολικό όριο στη διαθέσιμη μνήμη (“softlimit -m12345678”), οπότε το πρόβλημα αποκλείεται. Ως εναλλακτική μέθοδος προστασίας αναφέρεται επίσης ο περιορισμός του μέγιστου μεγέθους του επεξεργασμένου μηνύματος μέσω του αρχείου «control/databytes» (από προεπιλογή δεν δημιουργείται με προεπιλεγμένες ρυθμίσεις το qmail παραμένει ευάλωτο). Επιπλέον, το "control/databytes" δεν προστατεύει από τοπικές επιθέσεις από χρήστες του συστήματος, αφού το όριο λαμβάνεται υπόψη μόνο στο qmail-smtpd.

Το πρόβλημα επηρεάζει το πακέτο netqmail, που περιλαμβάνονται στα αποθετήρια του Debian. Ένα σύνολο ενημερώσεων κώδικα έχει προετοιμαστεί για αυτό το πακέτο, εξαλείφοντας τόσο παλιά τρωτά σημεία από το 2005 (με την προσθήκη ορίων σκληρής μνήμης στον κώδικα συνάρτησης alloc()) όσο και νέα προβλήματα στο qmail-verify. Χωριστά έτοιμος ενημερωμένη έκδοση της ενημέρωσης κώδικα qmail-verify. προγραμματιστές κλαδια δεντρου notqmail ετοίμασαν τις δικές τους ενημερώσεις κώδικα για να μπλοκάρουν παλιά προβλήματα και άρχισαν επίσης να εργάζονται για να εξαλείψουν όλες τις πιθανές υπερχειλίσεις ακεραίων στον κώδικα.

Πηγή: opennet.ru

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