Ghi ngoài giới hạn trong bộ giải mã Google Brotli có thể cho phép thực thi mã từ xa

Lưu ý: Dữ liệu này chỉ có tính chất tham khảo, phục vụ nghiên cứu an ninh mạng.CyStack khuyến nghị người dùng không sử dụng các thông tin này nhằm các mục đích bất hợp pháp

Lỗ hổng CVE-2026-111497 là gì?

Lỗ hổng CVE-2026-111497 là lỗ hổng thuộc các loại Out-of-bounds Write và Unchecked Return Value, ảnh hưởng tới Brotli (phiên bản bị ảnh hưởng: 1.0.3 – < 1.0.10, 1.1.0 – < 1.1.1 và các phiên bản bị ảnh hưởng khác). Lỗ hổng này được xếp hạng ở mức Nghiêm trọng, với điểm CVSS 9.2. Các nguồn hiện có chưa ghi nhận lỗ hổng này bị khai thác.

Giới thiệu chung

Dữ liệu gốc

Một lỗ hổng tràn bộ đệm trong bộ giải mã Brotli (c/dec/decode.c) của Google Brotli phiên bản 1.0.3 đến 1.2.0 trên mọi nền tảng cho phép kẻ tấn công từ xa không cần xác thực làm hỏng vùng nhớ trạng thái của bộ giải mã lân cận, tiết lộ nội dung bộ nhớ nhạy cảm, gây từ chối dịch vụ hoặc có khả năng thực thi mã tùy ý bằng cách sử dụng một Brotli-compressed stream được tạo thủ công. Người dùng cần cập nhật mọi thư viện hoặc binary Brotli trong khoảng 1.0.3 đến 1.2.0 lên phiên bản mới nhất hiện có: 1.0.10 hoặc 1.1.1 hoặc 1.2.1.

Sản phẩm và phạm vi ảnh hưởng

  • Google Brotli: affected trên mọi nền tảng trong các nhánh 1.0.3 <= version < 1.0.10, 1.1.0 <= version < 1.1.1 và 1.2.0 <= version < 1.2.1. Bản ghi có default_status là unaffected bên ngoài các phạm vi được liệt kê.
  • Node.js downstream: advisory của Node.js xác nhận các nhánh 22.x, 24.x và 26.x bị ảnh hưởng trước các bản sửa tương ứng 22.23.4, 24.22.1 và 26.12.1.
  • Debian trixie: gói brotli được sửa trong 1.1.0-2+deb13u1. Đây là ranh giới của gói Debian được advisory nêu, không thay thế cho việc kiểm tra các bản sao Brotli khác trong ứng dụng.

Chi tiết kỹ thuật

Thành phần dễ bị lỗi là bộ giải mã Brotli trong c/dec/decode.c. Node.js mô tả nguyên nhân cụ thể là một lần chuyển block không hợp lệ bị báo như tạm thời cần thêm dữ liệu thay vì lỗi định dạng vĩnh viễn, khiến bộ giải mã dạng streaming tiếp tục ghi dữ liệu đầu vào vào bộ đệm nội bộ tám byte. Luồng tấn công ở mức cao là: (1) kẻ tấn công cung cấp một Brotli stream được tạo thủ công; (2) ứng dụng chuyển stream đó cho bộ giải mã; (3) bộ giải mã ghi vượt quá giới hạn và làm hỏng vùng nhớ trạng thái lân cận; (4) tiến trình có thể bị treo, làm lộ dữ liệu bộ nhớ hoặc đạt được thực thi mã tùy ý. Điều kiện tiền đề là ứng dụng phải giải mã dữ liệu Brotli do kẻ tấn công kiểm soát, nhưng bản ghi mô tả khả năng tiếp cận từ xa mà không cần xác thực và không cần tương tác của người dùng. Bản ghi phân loại lỗi là CWE-787 và CWE-252; mối liên hệ chi tiết giữa CWE-252 với nhánh triển khai cụ thể không được nêu thêm. Bố cục vùng nhớ lân cận và mức độ tin cậy của việc thực thi mã trong từng phần mềm sử dụng vẫn chưa được xác lập.

Khả năng khai thác

Lỗi có thể bị tiếp cận qua mạng khi dịch vụ nhận hoặc tự động xử lý Brotli stream do kẻ tấn công kiểm soát. Bản ghi mô tả kẻ tấn công từ xa, không cần xác thực, độ phức tạp thấp và không cần người dùng tương tác, nhưng việc khai thác vẫn phụ thuộc vào việc ứng dụng thực sự gọi bộ giải mã. Đối với Node.js, các đường đi được báo cáo gồm body request Brotli, response Brotli được tự động giải nén và việc sử dụng trực tiếp các API node:zlib. Trường public_exploit trong bản ghi chuẩn hóa là false; tuy nhiên, một báo cáo Aikido sau đó cho biết đã xuất hiện public proof of concept và các nhà nghiên cứu đạt được thực thi mã trong điều kiện phòng lab trên một bản dựng Node.js không chỉnh sửa, với độ ổn định không nhất quán. Bản ghi được cung cấp không xác lập việc khai thác trong thực tế.

Tác động kỹ thuật

Một stream Brotli độc hại có thể làm hỏng vùng nhớ trạng thái của bộ giải mã và dẫn đến crash, tiết lộ dữ liệu trong bộ nhớ, thay đổi dữ liệu trong tiến trình hoặc thực thi mã tùy ý. Hậu quả về quyền phụ thuộc vào quyền của tiến trình đang giải mã stream; thực thi mã, nếu đạt được, có khả năng hoạt động trong phạm vi quyền đó. Lỗi tác động trực tiếp đến hệ thống xử lý dữ liệu và bản ghi không xác lập một tác động riêng lên hệ thống downstream khác. Mức độ tin cậy của việc biến lỗi ghi ngoài giới hạn thành thực thi mã cũng có thể thay đổi theo allocator, bố cục bộ nhớ, build và cách phần mềm tích hợp Brotli.

Tác động đến tổ chức

  • Dịch vụ xử lý compressed input không tin cậy có thể bị crash hoặc mất tính sẵn sàng, dẫn đến restart, failover hoặc gián đoạn request.
  • Việc đọc vượt vùng nhớ có thể làm lộ dữ liệu nhạy cảm đang tồn tại trong không gian nhớ của tiến trình, tùy vào bố cục bộ nhớ và dữ liệu được xử lý.
  • Nếu đạt được thực thi mã, mã độc có thể hoạt động với quyền của tiến trình giải mã, ảnh hưởng đến dữ liệu và chức năng mà service account đó được phép truy cập.
  • Đội vận hành có thể phải kiểm kê khẩn cấp các runtime, container image, thư viện nhúng và binary tự đóng gói, vì cập nhật một gói hệ điều hành không nhất thiết cập nhật bản sao Brotli đã được bundle.

Cách khắc phục

  1. Cập nhật Google Brotli: nâng các nhánh bị ảnh hưởng lên đúng bản sửa tương ứng 1.0.10, 1.1.1 hoặc 1.2.1 theo nhánh đang sử dụng.
  2. Cập nhật downstream runtime và binary: với Node.js, triển khai bản sửa tương ứng 22.23.4, 24.22.1 hoặc 26.12.1. Với Debian trixie, nâng gói brotli lên 1.1.0-2+deb13u1.
  3. Rebuild và redeploy: xây dựng lại container image, binary tự đóng gói và ứng dụng NativeAOT hoặc self-contained có thể đã liên kết bản sao decoder dễ bị lỗi. Sau khi cập nhật, restart các tiến trình để chúng nạp decoder đã sửa.
  4. Nếu chưa thể cập nhật ngay: tạm thời tránh chuyển dữ liệu Brotli không tin cậy vào decoder; với đường vào HTTP, có thể chặn request có Content-Encoding: br ở reverse proxy hoặc middleware nếu phù hợp. Đây chỉ là biện pháp giảm phơi nhiễm một phần và không bảo vệ các đường đi như response Brotli do ứng dụng tự tải.

Cách phát hiện

  • Kiểm kê mọi thư viện, binary, runtime và bản sao Brotli được nhúng trong ứng dụng, container image hoặc binary tự đóng gói. Không chỉ dựa vào inventory của hệ điều hành vì bản sao được bundle có thể không xuất hiện dưới dạng gói riêng.
  • Kiểm tra phiên bản Brotli theo từng nhánh bị ảnh hưởng trong affected_summary, bao gồm các thư viện do dependency hoặc binary đóng gói kéo theo.
  • Với Node.js, chạy node --version trên máy chủ, CI runner và bên trong từng container image; kiểm tra cả các tiến trình đang chạy thay vì chỉ kiểm tra file cài đặt.
  • Rà soát các đường đi giải mã dữ liệu không tin cậy, gồm node:zlib, các lời gọi brotliDecompress hoặc createBrotliDecompress, body có Content-Encoding: br và các HTTP response được ứng dụng tự động giải nén.
  • Như một biện pháp thận trọng, xem xét crash report, restart bất thường và cảnh báo rò rỉ bộ nhớ tại các dịch vụ xử lý compressed input. Đây không phải là IOC đặc hiệu và việc không có log như vậy không chứng minh hệ thống an toàn.
Nguồn (31)
Tìm hiểu thêm

Kiểm tra chuyên sâu cùng giải pháp quản lý rủi ro Web toàn diện

Giải pháp CyStack VulnScan liên tục phát hiện tài sản, xác minh lỗ hổng và giúp đội ngũ bảo mật ưu tiên khắc phục cho toàn bộ doanh nghiệp.

Khám phá các giải pháp khác liên quan