Ένα θέμα ευπάθειας (CVE-2026-111497, με κωδικές ονομασίες Broccoli2Shell και HTTP2Shell) εντοπίστηκε στη βιβλιοθήκη που περιέχει την υλοποίηση αναφοράς του αποκωδικοποιητή συμπίεσης δεδομένων Brotli. Αυτό το θέμα ευπάθειας οδηγεί σε υπερχείλιση buffer κατά την επεξεργασία ειδικά δημιουργημένων συμπιεσμένων δεδομένων. Σύμφωνα με την Google, αυτό το θέμα ευπάθειας μπορεί να χρησιμοποιηθεί για απομακρυσμένη εκτέλεση κώδικα κατά την επίθεση σε έργα που χρησιμοποιούν την επίσημη υλοποίηση αποκωδικοποιητή Brotli. Τα έργα που επηρεάζονται περιλαμβάνουν τα Node.js, Bun, Envoy, Istio, προγράμματα περιήγησης ιστού, διακομιστές proxy, πελάτες HTTP, διακομιστές HTTP, αρχειοθέτες, διακομιστές proxy, υλικολογισμικό UEFI, προγράμματα προβολής JPEG XL, βιβλιοθήκες αποκωδικοποίησης περιεχομένου για Python, Ruby, Java, PHP και .NET, και τις σχετικές εξαρτήσεις τους.
Το πρόβλημα ανακαλύφθηκε από την OpenAI τον Φεβρουάριο του τρέχοντος έτους και μπλοκαρίστηκε στη βάση κώδικα του Brotli απορρίπτοντας μη έγκυρες ροές κατά την αποκωδικοποίηση. Στις 22 Οκτωβρίου, δημοσιεύθηκαν οι εκδόσεις patch των Brotli 1.0.10, 1.1.1 και 1.2.1, οι οποίες ανακοίνωναν ρητά τη διόρθωση και αντιμετώπιζαν το υποκείμενο πρόβλημα. Την ίδια ημέρα, δημιουργήθηκε ένα πρωτότυπο exploit που επέτρεπε την απομακρυσμένη εκτέλεση κώδικα σε εργαστηριακές συνθήκες χρησιμοποιώντας μη τυπικές εκδόσεις (οι τυπικές εκδόσεις θα κατέρρεαν). Η Imperva αργότερα εντόπισε μια επίθεση στις τυπικές εκδόσεις Node.js 24.22.0. Linux- περιβάλλον στο σύστημα ARM64.
Η ευπάθεια έχει ως αποτέλεσμα μια εγγραφή buffer εκτός ορίων λόγω ακατάλληλου χειρισμού σφαλμάτων κατά την ανάλυση μπλοκ σε μια συμπιεσμένη ροή. Η συνάρτηση DecodeBlockTypeAndLength() επέστρεψε μόνο τιμές true και false αντί για κωδικό σφάλματος, εμποδίζοντας τον καλούντα να διακρίνει μεταξύ της καταστροφής της ροής και μιας συνθήκης που απαιτεί τη διαβίβαση πρόσθετων δεδομένων στη συνάρτηση. Εάν ένας λανθασμένος τύπος μπλοκ συμπιεσμένων δεδομένων είχε καθοριστεί στη ροή, ο αποκωδικοποιητής δεν το ερμήνευσε ως σφάλμα, αλλά ως συνθήκη εκτός δεδομένων που απαιτεί πρόσθετη ανάγνωση από τη ροή. Ωστόσο, επειδή το εκχωρημένο buffer δεν είχε σχεδιαστεί για να φιλοξενήσει πρόσθετη ανάγνωση δεδομένων, τα δεδομένα εγγράφηκαν σε μια περιοχή εκτός του buffer που αποθήκευε την εσωτερική κατάσταση του αποκωδικοποιητή.
Επηρεαζόμενα έργα:
- Η βιβλιοθήκη αναφοράς Brotli, ένα πρόβλημα που υπάρχει από την έκδοση 1.0.3 και διορθώθηκε στις ενημερώσεις 1.0.10, 1.1.1 και 1.2.1, επηρεάζει εφαρμογές και βιβλιοθήκες που χρησιμοποιούν τη βιβλιοθήκη libbrotlidec.
- Η πλατφόρμα Node.js JavaScript ενημερώθηκε στις ενημερώσεις 26.12.1, 24.22.1 και 22.23.4. Οι εφαρμογές που χρησιμοποιούν τη μέθοδο fetch() για να ζητήσουν περιεχόμενο τρίτων, η οποία αποκωδικοποιεί αυτόματα τις απαντήσεις HTTP με την κεφαλίδα "Content-Encoding: br", μπορεί να είναι ευάλωτες. Η ευπάθεια εκδηλώνεται επίσης κατά την άμεση κλήση των μεθόδων zlib.brotliDecompress*(), createBrotliDecompress() και brotli.decompress() για την αποσυμπίεση περιεχομένου τρίτων ή κατά τη λήψη αιτημάτων HTTP που αναλύονται μέσω των βιβλιοθηκών Express 5 και body-parser 2.x.
- Τα πακέτα Python brotli και brotlicffi (η διόρθωση προτείνεται στην έκδοση 1.2.1) και τα έργα που τα χρησιμοποιούν, συμπεριλαμβανομένων των δημοφιλών βιβλιοθηκών urllib3, aiohttp, httpx και Scrapy, οι οποίες αποκωδικοποιούν απαντήσεις με την κεφαλίδα "Content-Encoding: br" κατά την πρόσβαση σε εξωτερικούς πόρους ιστού.
- Διακομιστές HTTP, διακομιστές μεσολάβησης HTTP, υπολογιστές-πελάτες HTTP και προγράμματα περιήγησης ιστού που υποστηρίζουν συμπίεση Brotli ("Accept-Encoding: br"). Το Apache httpd συνοδεύεται από το mod_brotli (απενεργοποιημένο από προεπιλογή). Μια ενότητα τρίτου κατασκευαστή, η ngx_brotli, είναι διαθέσιμη για το nginx (η έκδοση brotli στις εξαρτήσεις έχει ενημερωθεί στην πιο πρόσφατη έκδοση). Στο Chrome/Chromium και τον Firefox, το πρόβλημα έχει ήδη διορθωθεί σε προηγούμενη ενημέρωση. Στο proxy-υπηρέτης Η ευπάθεια Envoy διορθώθηκε στις εκδόσεις 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- Χρόνος εκτέλεσης .NET κατά τη χρήση των μεθόδων BrotliDecoder, BrotliStream και HttpClient σε μια εφαρμογή. Η ευπάθεια δεν έχει ακόμη διορθωθεί.
- Επέκταση brotli PHP κατά τη χρήση της συνάρτησης brotli_uncompress(). Διόρθωση σε εξέλιξη.
- Το πακέτο Ruby Brotli ήταν ευάλωτο σε exploits χρησιμοποιώντας τη μέθοδο Brotli.inflate. Η ευπάθεια δεν έχει ακόμη διορθωθεί.
- DuckDB κατά την εισαγωγή συμπιεσμένων αρχείων Parquet. Διόρθωση σε εξέλιξη.
- ΣΔΒΔ ClickHouse. Διόρθωση σε εξέλιξη.
- YDB DBMS. Η ευπάθεια δεν έχει ακόμη διορθωθεί.
- Σφάλμα Apache Arrow κατά την εισαγωγή συμπιεσμένων αρχείων Parquet. Διόρθωση σε εξέλιξη.
- libjxl (χρησιμοποιεί Brotli για συμπίεση μεταδεδομένων JPEG XL).
Διόρθωση σε προετοιμασία. - Τα προγράμματα αρχειοθέτησης NanaZip, 7-Zip-zstd και p7zip είναι ευάλωτα κατά την αποσυσκευασία αρχείων .br. Η ευπάθεια παραμένει.
- MuPDF. Η ευπάθεια δεν έχει διορθωθεί.
- Υλικολογισμικό UEFI βασισμένο στο EDK II και το UEFITool, συμπιεσμένο με το Brotli. Προετοιμάζεται μια επιδιόρθωση για το EDK II και το UEFITool.
- Πλαίσιο JavaScript Bun. Η ευπάθεια διορθώθηκε στην έκδοση 1.4.4.
- Istio, μια πλατφόρμα διαχείρισης μικροϋπηρεσιών. Το κενό ασφαλείας διορθώθηκε στις εκδόσεις 1.29.9, 1.30.6 και 1.31.2.
- curl και libcurl, η ευπάθεια εκδηλώνεται όταν μια ευάλωτη έκδοση του libbrotlidec υπάρχει στις εξαρτήσεις.
- Αναλυτές για τη μορφή γραμματοσειράς Web Open Font (WOFF), η οποία χρησιμοποιεί
Μπρότλι. - Brotli4j, SumatraPDF, Ghostscript, CatBoost και YTsaurus. Η ευπάθεια διορθώθηκε σε μια ενημέρωση.
Πηγή: opennet.ru
