TL? DRΑφού αντιμετώπισε την τρίτη υπερχείλιση buffer που ανακαλύφθηκε το 2026 (και, σύμφωνα με το F5, ένα RCE εάν δεν υπάρχει ASLR) κατά την εργασία με regexps και μεταβλητές, ο προγραμματιστής του freenginx, Maxim Dunin, αποφάσισε ότι ήταν καιρός να το σταματήσει και πρόσθεσε έναν έλεγχο μεγέθους μεταβλητής στο προϊόν του πριν γράψει δεδομένα σε αυτό. Η Nginx έχει έκτοτε αντιγράψει αυτήν τη λειτουργία, δίνοντας ελπίδα ότι τα νέα CVE που σχετίζονται με αυτό το ζήτημα θα εξαλειφθούν.
Τώρα για τις λεπτομέρειες.
Στις 19 Ιουνίου έγινε διαπράττω στο Freenginx, το οποίο προσθέτει ένα πεδίο τέλους στον περιγραφέα μεταβλητής, που υποδεικνύει το τέλος του buffer. Προηγουμένως, υπήρχε μόνο ένας δείκτης στην αρχή του (pos), το απαιτούμενο μήκος υπολογιζόταν (και εξακολουθεί να υπολογίζεται) εκ των προτέρων και, όταν τα δεδομένα αντιγράφονταν στη μεταβλητή, θεωρούνταν ότι το σωστά υπολογισμένο μήκος θα εγγυόταν ότι τα δεδομένα θα χωρούσαν στο buffer. Δυστυχώς, αυτό έχει ήδη αποδειχθεί λανθασμένο δύο φορές τον Μάιο του 2026 λόγω διαφόρων παραλείψεων.1 (linux.org.ru), 2 (linux.org.ru)), κάτι που οδήγησε σε υπερχείλιση buffer και ολέθριες συνέπειες. Τώρα, όταν δημιουργείται το buffer μιας μεταβλητής, ο δείκτης στο τέλος της γεμίζει επίσης και πριν από την εγγραφή δεδομένων στη μεταβλητή, εάν τα δεδομένα δεν ταιριάζουν, η επεξεργασία αιτήματος θα τερματιστεί με ένα σφάλμα με ελεγχόμενο τρόπο. Αυτό σημαίνει ότι τα σφάλματα υπολογισμού μήκους ενδέχεται να εξακολουθούν να υπάρχουν, αλλά δεν θα σπαταλούν μνήμη. Απλώς θα αποτύχουν στο συγκεκριμένο αίτημα HTTP. Οι ακόλουθες υποβολές (2 (freenginx.org), 3 (freenginx.org)) παρόμοια προστασία προστέθηκε σε άλλα μέρη του κώδικα, συμπεριλαμβανομένου του κώδικα καταγραφής πρόσβασης. Μια έκδοση δημοσιεύθηκε στις 7 Ιουλίου Freenginx 1.31.3, το οποίο περιλαμβάνει αυτήν την επιδιόρθωση.
Στις 15 Ιουλίου, αυτές οι υποβολές αναλήφθηκαν από το nginx (1 (github.com), 2 (github.com), 3 (github.com), για κάποιο λόγο εναλλάσσοντας το δεύτερο και το τρίτο στην αλυσίδα), το πρόβλημα ανατέθηκε CVE-2026-42533και το F5 κυκλοφόρησε μια επίσημη Νότια Αφρική (f5.com).
Όσον αφορά το συγκεκριμένο κενό ασφαλείας αυτή τη φορά: εκδηλώνεται κατά τη χρήση της οδηγίας map με regexps με εξαγόμενες παραμέτρους. Όσον αφορά τις άλλες συνθήκες που απαιτούνται για την ενεργοποίησή της, το κείμενο στην περιγραφή της υποβολής και το κείμενο στην SA διαφέρουν ελαφρώς: η SA αναφέρει ότι στη συνέχεια πρέπει να υπολογιστεί μια συγκεκριμένη συμβολοσειρά, η οποία χρησιμοποιεί την εξαγόμενη παράμετρο που απομένει από τον χάρτη, πριν από το αποτέλεσμα του ίδιου χάρτη. Στην περιγραφή της υποβολής στο παράδειγμα, μεταξύ αυτών των βημάτων, η μεταβλητή που περιέχει την εξαγόμενη παράμετρο μηδενίζεται επίσης. Ωστόσο, αυτό είναι απίθανο να συμβεί στα περισσότερα nginxes που εκτελούνται και επομένως το κενό ασφαλείας επηρέασε λίγους ανθρώπους. Αξίζει επίσης να σημειωθεί ότι μια διόρθωση για τον υπολογισμό μήκους ειδικά για αυτήν την περίπτωση δεν υπάρχει στις επεξεργασίες που έχουν υποβληθεί (ή μήπως έψαξα άσχημα;), υπάρχει μόνο μια προστασία που μετατρέπει το πρόβλημα σε ελεγχόμενη αποτυχία αιτήματος HTTP. Αν και ορισμένες διορθώσεις προστέθηκαν στο freenginx στις 19 Ιουλίου (5bfb, 7622, b906) υπολογίζοντας το μήκος για μια παρόμοια περίπτωση, αλλά δεν είναι άμεσα σαφές εάν αυτό ισχύει ή όχι.
Το θέμα ευπάθειας εμφανίστηκε στην έκδοση nginx 0.9.6, ενώ οι διορθώσεις συμπεριλήφθηκαν στις εκδόσεις freenginx 1.31.3, nginx 1.30.4, nginx 1.31.3.
Η nginx SA ευχαριστεί ορισμένα άτομα για την ανεξάρτητη αναφορά της ευπάθειας και την τήρηση των "συντονισμένων προτύπων αποκάλυψης":
Το F5 αναγνωρίζει τους Ming Xuan, DKD (@pidifn), Ji'an Zhou και Zhen Yan της AntAISEcurityLab, Rafael Gacek, Sergii Negodiuk της EVO.company, Lam Jun Rong της Calif.io, Mufeed VH της Winfunc Research (winfunc.com), Vexera AI (https://vexera.ai), Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin της depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin της Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil) και Milan Jovic (Kljunowsky) για την ανεξάρτητη επίκληση αυτού του ζητήματος και την τήρηση των υψηλότερων προτύπων συντονισμένης γνωστοποίησης.
Στο freenginx, οι συνοδευτικές πληροφορίες σχετικά με την επιδιόρθωση περιορίζονται στην πραγματικότητα στο μήνυμα υποβολής. changelogΑυτή η διόρθωση δεν φέρει καν την ένδειξη "ασφάλεια" ή "διόρθωση σφάλματος", απλώς "λειτουργία". Προφανώς, ο συγγραφέας δεν θεώρησε αυτό το ζήτημα κρίσιμο. Είναι αδύνατο να προσδιοριστεί η σχέση μεταξύ των ζητημάτων που αναφέρθηκαν από τα προαναφερθέντα άτομα στο F5 και της υποβολής που αντιγράφηκε από το freenginx ή αν αυτά (ή οποιοσδήποτε άλλος) ανέφεραν το ζήτημα στον συγγραφέα του freenginx.
Πηγή: linux.org.ru
