Một lỗ hổng bảo mật (CVE-2026-111497, tên mã Broccoli2Shell và HTTP2Shell) đã được phát hiện trong thư viện chứa mã nguồn tham chiếu của bộ giải mã nén dữ liệu Brotli. Lỗ hổng này dẫn đến lỗi tràn bộ đệm khi xử lý dữ liệu nén được tạo ra đặc biệt. Theo Google, lỗ hổng này có thể được sử dụng để thực thi mã từ xa khi tấn công các dự án sử dụng mã nguồn giải mã Brotli chính thức. Các dự án bị ảnh hưởng bao gồm Node.js, Bun, Envoy, Istio, trình duyệt web, máy chủ proxy, máy khách HTTP, máy chủ HTTP, trình lưu trữ, phần mềm nhúng UEFI, trình xem JPEG XL, thư viện giải mã nội dung cho Python, Ruby, Java, PHP và .NET, cùng các thư viện phụ thuộc liên quan.
Vấn đề này được OpenAI phát hiện vào tháng 2 năm nay và đã được khắc phục trong mã nguồn Brotli bằng cách loại bỏ các luồng dữ liệu không hợp lệ trong quá trình giải mã. Vào ngày 22 tháng 10, các bản vá lỗi Brotli 1.0.10, 1.1.1 và 1.2.1 đã được phát hành, thông báo rõ ràng về việc sửa lỗi và giải quyết vấn đề cơ bản. Cùng ngày, một nguyên mẫu khai thác đã được tạo ra cho phép thực thi mã từ xa trong điều kiện phòng thí nghiệm bằng cách sử dụng các bản dựng không chuẩn (các bản dựng chuẩn sẽ bị lỗi). Sau đó, Imperva đã phát hiện ra một cuộc tấn công vào các bản dựng Node.js 24.22.0 chuẩn. Linux- Môi trường trên hệ thống ARM64.
Lỗ hổng này dẫn đến việc ghi dữ liệu ra ngoài vùng nhớ đệm do xử lý lỗi không đúng cách trong quá trình phân tích khối dữ liệu trong luồng nén. Hàm DecodeBlockTypeAndLength() chỉ trả về giá trị true và false thay vì mã lỗi, khiến người gọi không thể phân biệt giữa lỗi hỏng luồng và tình trạng cần truyền thêm dữ liệu cho hàm. Nếu loại khối dữ liệu nén không chính xác được chỉ định trong luồng, bộ giải mã sẽ hiểu đó không phải là lỗi mà là tình trạng thiếu dữ liệu, cần đọc thêm dữ liệu từ luồng. Tuy nhiên, vì vùng nhớ đệm được cấp phát không được thiết kế để chứa thêm dữ liệu cần đọc, dữ liệu đã được ghi vào vùng nhớ đệm nằm ngoài vùng nhớ đệm lưu trữ trạng thái nội bộ của bộ giải mã.
Các dự án bị ảnh hưởng:
- Thư viện tham chiếu Brotli, một vấn đề đã tồn tại từ phiên bản 1.0.3 và đã được khắc phục trong các bản cập nhật 1.0.10, 1.1.1 và 1.2.1, ảnh hưởng đến các ứng dụng và thư viện sử dụng thư viện libbrotlidec.
- Nền tảng JavaScript Node.js đã được vá lỗi trong các bản cập nhật 26.12.1, 24.22.1 và 22.23.4. Các ứng dụng sử dụng phương thức `fetch()` để yêu cầu nội dung của bên thứ ba, phương thức này tự động giải mã phản hồi HTTP với tiêu đề "Content-Encoding: br", có thể dễ bị tổn thương. Lỗ hổng này cũng xuất hiện khi gọi trực tiếp các phương thức `zlib.brotliDecompress*()`, `createBrotliDecompress()` và `brotli.decompress()` để giải nén nội dung của bên thứ ba, hoặc khi nhận các yêu cầu HTTP được phân tích cú pháp thông qua thư viện Express 5 và body-parser 2.x.
- Các gói Python brotli và brotlicffi (đề xuất sửa lỗi trong phiên bản 1.2.1) và các dự án sử dụng chúng, bao gồm các thư viện phổ biến urllib3, aiohttp, httpx và Scrapy, giải mã các phản hồi có tiêu đề "Content-Encoding: br" khi truy cập các tài nguyên web bên ngoài.
- Các máy chủ HTTP, máy chủ proxy HTTP, máy khách HTTP và trình duyệt web hỗ trợ nén Brotli ("Accept-Encoding: br"). Apache httpd đi kèm với mod_brotli (mặc định bị vô hiệu hóa). Một mô-đun bên thứ ba, ngx_brotli, có sẵn cho nginx (phiên bản brotli trong dependencies đã được cập nhật lên phiên bản mới nhất). Trong Chrome/Chromium và Firefox, sự cố đã được khắc phục trong bản cập nhật trước đó. Trong proxy-người phục vụ Lỗ hổng bảo mật Envoy đã được khắc phục trong các phiên bản 1.40.0, 1.39.3, 1.38.6, 1.37.8, 1.36.12.
- Lỗ hổng này xuất hiện khi sử dụng các phương thức BrotliDecoder, BrotliStream và HttpClient trong ứng dụng trong môi trường chạy .NET. Hiện tại lỗ hổng vẫn chưa được vá.
- Lỗi xảy ra khi sử dụng hàm `brotli_uncompress()` trong PHP extension. Đang khắc phục.
- Gói Ruby Brotli dễ bị tấn công bằng phương thức Brotli.inflate. Lỗ hổng này vẫn chưa được vá.
- Khi sử dụng DuckDB để nhập các tệp Parquet đã nén. Đang khắc phục sự cố.
- Hệ quản trị cơ sở dữ liệu ClickHouse. Đang sửa lỗi.
- Hệ quản trị cơ sở dữ liệu YDB. Lỗ hổng này vẫn chưa được khắc phục.
- Apache Arrow khi nhập các tệp Parquet nén. Đang khắc phục sự cố.
- libjxl (sử dụng Brotli để nén siêu dữ liệu JPEG XL).
Đang trong quá trình chỉnh sửa. - Các phần mềm nén NanaZip, 7-Zip-zstd và p7zip dễ bị tổn thương khi giải nén các tệp .br. Lỗ hổng này vẫn còn tồn tại.
- MuPDF. Lỗ hổng này vẫn chưa được vá.
- Firmware UEFI dựa trên EDK II và UEFITool, được nén bằng Brotli. Bản vá lỗi đang được chuẩn bị cho EDK II và UEFITool.
- Lỗ hổng này đã được khắc phục trong framework JavaScript Bun, phiên bản 1.4.4.
- Istio, một nền tảng quản lý kiến trúc microservices. Lỗ hổng này đã được khắc phục trong các phiên bản 1.29.9, 1.30.6 và 1.31.2.
- Lỗ hổng này xuất hiện khi có phiên bản libbrotlidec dễ bị tổn thương trong các thư viện phụ thuộc.
- Các trình phân tích cú pháp cho định dạng phông chữ Web Open Font (WOFF), sử dụng
Brotli. - Brotli4j, SumatraPDF, Ghostscript, CatBoost và YTsaurus. Lỗ hổng này đã được khắc phục trong bản cập nhật.
Nguồn: opennet.ru
