Ευπάθεια στο Apache Tomcat που επιτρέπει την αντικατάσταση του κώδικα JSP και τη λήψη αρχείων εφαρμογών web

Ερευνητές από την κινεζική εταιρεία Chaitin Tech ανακάλυψαν τρωτό (CVE-2020-1938) στο Apache Tomcat, μια ανοιχτή υλοποίηση τεχνολογιών Java Servlet, JavaServer Pages, Java Expression Language και Java WebSocket. Στην ευπάθεια έχει εκχωρηθεί το κωδικό όνομα Ghostcat και ένα κρίσιμο επίπεδο σοβαρότητας (9.8 CVSS). Το πρόβλημα επιτρέπει, στην προεπιλεγμένη διαμόρφωση, στέλνοντας ένα αίτημα στη θύρα δικτύου 8009, να διαβάσετε τα περιεχόμενα οποιωνδήποτε αρχείων από τον κατάλογο εφαρμογών web, συμπεριλαμβανομένων αρχείων με ρυθμίσεις και πηγαίους κώδικες εφαρμογής.

Η ευπάθεια καθιστά επίσης δυνατή την εισαγωγή άλλων αρχείων στον κώδικα εφαρμογής, κάτι που επιτρέπει την εκτέλεση κώδικα στον διακομιστή, εάν η εφαρμογή επιτρέπει τη μεταφόρτωση αρχείων στον διακομιστή (για παράδειγμα, ένας εισβολέας μπορεί να ανεβάσει ένα σενάριο JSP μεταμφιεσμένο ως εικόνα μέσω τη φόρμα μεταφόρτωσης εικόνας). Η επίθεση μπορεί να πραγματοποιηθεί όταν είναι δυνατή η αποστολή ενός αιτήματος σε μια θύρα δικτύου με έναν χειριστή AJP. Σύμφωνα με προκαταρκτικά στοιχεία, διαδικτυακά βρέθηκαν περισσότεροι από 1.2 εκατομμύρια οικοδεσπότες δέχονται αιτήματα μέσω του πρωτοκόλλου AJP.

Η ευπάθεια υπάρχει στο πρωτόκολλο AJP και δεν καλείται σφάλμα στην εφαρμογή. Εκτός από την αποδοχή συνδέσεων μέσω HTTP (θύρα 8080), το Apache Tomcat από προεπιλογή επιτρέπει την πρόσβαση σε μια εφαρμογή Ιστού μέσω του πρωτοκόλλου AJP (Πρωτόκολλο Apache Jserv, θύρα 8009), το οποίο είναι ένα δυαδικό ανάλογο του HTTP βελτιστοποιημένο για υψηλότερη απόδοση, που χρησιμοποιείται συνήθως κατά τη δημιουργία ενός συμπλέγματος διακομιστών Tomcat ή για την επιτάχυνση της αλληλεπίδρασης με τον Tomcat σε έναν αντίστροφο διακομιστή μεσολάβησης ή εξισορρόπηση φορτίου.

Το AJP παρέχει μια τυπική λειτουργία για την πρόσβαση σε αρχεία στον διακομιστή, η οποία μπορεί να χρησιμοποιηθεί, συμπεριλαμβανομένης της λήψης αρχείων που δεν υπόκεινται σε αποκάλυψη. Το AJP υποτίθεται ότι είναι προσβάσιμο μόνο σε αξιόπιστους διακομιστές, αλλά στην πραγματικότητα η προεπιλεγμένη διαμόρφωση του Tomcat έτρεχε το πρόγραμμα χειρισμού σε όλες τις διεπαφές δικτύου και αποδεχόταν αιτήματα χωρίς έλεγχο ταυτότητας. Είναι δυνατή η πρόσβαση σε οποιαδήποτε αρχεία εφαρμογής Ιστού, συμπεριλαμβανομένων των περιεχομένων των WEB-INF, META-INF και οποιωνδήποτε άλλων καταλόγων παρέχονται μέσω κλήσης στο ServletContext.getResourceAsStream(). Το AJP σάς επιτρέπει επίσης να χρησιμοποιείτε οποιοδήποτε αρχείο σε καταλόγους προσβάσιμους στην εφαρμογή Ιστού ως σενάριο JSP.

Το πρόβλημα εμφανίζεται από τότε που κυκλοφόρησε το υποκατάστημα Tomcat 13.x πριν από 6 χρόνια. Εκτός από το ίδιο το πρόβλημα Tomcat επηρεάζει και προϊόντα που το χρησιμοποιούν, όπως Red Hat JBoss Web Server (JWS), JBoss Enterprise Application Platform (EAP), καθώς και αυτόνομες διαδικτυακές εφαρμογές που χρησιμοποιούν Ανοιξιάτικη μπότα. Παρόμοια ευπάθεια (CVE-2020-1745) παρόν στον web server Αντίρευμα, που χρησιμοποιείται στον διακομιστή εφαρμογής Wildfly. Στο JBoss και στο Wildfly, το AJP είναι ενεργοποιημένο από προεπιλογή μόνο σε προφίλ standalone-full-ha.xml, standalone-ha.xml και ha/full-ha στο domain.xml. Στην Spring Boot, η υποστήριξη AJP είναι απενεργοποιημένη από προεπιλογή. Επί του παρόντος, διαφορετικές ομάδες έχουν προετοιμάσει περισσότερα από δώδεκα παραδείγματα εργασίας εκμεταλλεύσεων (
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11).

Διορθώθηκε ευπάθεια στις εκδόσεις Tomcat 9.0.31, 8.5.51 и 7.0.100 (συντήρηση κλάδου 6.x τερματίστηκε). Μπορείτε να παρακολουθείτε τη διαθεσιμότητα ενημερώσεων σε κιτ διανομής σε αυτές τις σελίδες: Debian, Ubuntu, RHEL, Μαλακό καπέλλο, SUSE, FreeBSD. Ως λύση, μπορείτε να απενεργοποιήσετε την υπηρεσία Tomcat AJP Connector (συνδέστε μια υποδοχή ακρόασης στο localhost ή σχολιάστε τη γραμμή με τη θύρα Connector = "8009") εάν δεν χρειάζεται, ή ρυθμίσετε επαληθεύτηκε πρόσβαση με χρήση των χαρακτηριστικών "secret" και "address", εάν η υπηρεσία χρησιμοποιείται για αλληλεπίδραση με άλλους διακομιστές και διακομιστή μεσολάβησης βάσει mod_jk και mod_proxy_ajp (το mod_cluster δεν υποστηρίζει έλεγχο ταυτότητας).

Πηγή: opennet.ru

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