Bảo mật

Apache Thrift CVE-2026-120135: dữ liệu lồng sâu có thể làm Java ngừng đáp ứng

Apache Thrift Java trước 0.24.0 không giới hạn độ sâu mặc định khi TProtocolUtil.skip() bỏ qua trường lạ, có thể gây stack overflow và từ chối dịch vụ.

thuemaychu.vn
Minh họa dữ liệu RPC lồng nhiều lớp bị chặn bởi giới hạn độ sâu trước máy chủ Java

Một dịch vụ RPC có thể không hiểu mọi trường trong thông điệp và dùng hàm bỏ qua để tiếp tục đọc. Nếu trường lạ được lồng quá sâu, chính thao tác “bỏ qua” có thể làm tiến trình Java cạn stack. CVE-2026-120135 được Apache công bố ngày 30/10/2026 và ghi vào GitHub Advisory Database ngày 31/10, ảnh hưởng Apache Thrift Java trước 0.24.0.

Lỗi nằm trong TProtocolUtil.skip()

Apache Thrift là khung RPC và định dạng tuần tự hóa giúp dịch vụ ở nhiều ngôn ngữ trao đổi dữ liệu. RPC là cách một chương trình gọi hàm trên dịch vụ khác như gọi hàm cục bộ. Trong Java, TProtocolUtil.skip() bỏ qua một giá trị mà ứng dụng không cần đọc, chẳng hạn trường mới từ phiên bản giao thức khác.

Các bản trước 0.24.0 không giới hạn độ sâu đệ quy mặc định. Đệ quy là khi hàm tiếp tục gọi lại chính nó để xử lý cấu trúc lồng bên trong. Một thông điệp được tạo với rất nhiều lớp danh sách, map hoặc struct có thể làm stack của luồng Java đầy và ném lỗi, dẫn tới từ chối dịch vụ.

Phạm vi theo thông báo Apache gửi ngày 30/10/2026.
Hạng mụcThông tin
MãCVE-2026-120135
Mức độHigh, CVSS 4.0 là 8.2 theo Apache
Thành phầnJava binding org.apache.thrift:libthrift
Bản ảnh hưởngTrước 0.24.0
Bản sửa0.24.0
Tác độngCạn stack, luồng hoặc tiến trình ngừng xử lý
Khai thác thực tếChưa được nguồn xác nhận

Dịch vụ nào có nguy cơ?

Rủi ro xuất hiện khi dịch vụ Java nhận thông điệp Thrift từ nguồn không tin cậy và đi qua skip(). Cổng RPC mở Internet là trường hợp rõ nhất, nhưng hàng đợi nội bộ, proxy API hoặc dịch vụ nhiều tenant cũng có thể chuyển dữ liệu của khách hàng tới bộ giải mã. Dịch vụ chỉ tạo thông điệp mà không phân tích đầu vào sẽ có bề mặt khác.

Điều kiện CVSS nêu attack requirements present, nghĩa là kẻ tấn công cần đưa được cấu trúc phù hợp tới đường xử lý bị ảnh hưởng. Không có tác động bảo mật dữ liệu trực tiếp được mô tả; mục tiêu chính là tính sẵn sàng. Tuy vậy, một tiến trình Java khởi động lại liên tục có thể làm gián đoạn chuỗi dịch vụ phía sau.

Checklist nâng cấp cho đội backend

  1. Tìm org.apache.thrift:libthrift trong Maven, Gradle, SBOM và image container; kiểm tra cả phụ thuộc gián tiếp.
  2. Nâng lên 0.24.0 hoặc mới hơn trong nhánh thử nghiệm, rồi chạy kiểm thử tương thích với client cũ và mới.
  3. Dựng lại image, xác nhận JAR thực tế trong container thay vì chỉ kiểm tra tệp khai báo ở kho mã.
  4. Đặt giới hạn kích thước thông điệp, thời gian xử lý, số kết nối và hàng đợi tại proxy hoặc server RPC.
  5. Không mở cổng Thrift trực tiếp ra Internet nếu không cần; dùng xác thực, phân đoạn mạng và danh sách nguồn cho phép.
  6. Theo dõi StackOverflowError, số lần tiến trình khởi động lại, luồng treo và đột biến lỗi giải mã.
  7. Nếu chưa thể nâng ngay, chặn nguồn không tin cậy và giảm quyền truy cập endpoint; tăng stack chỉ trì hoãn lỗi, không xử lý nguyên nhân.

Tại sao tăng -Xss không phải bản vá?

Tham số -Xss tăng stack cho mỗi luồng Java. Nó có thể làm thông điệp cần nhiều lớp hơn mới gây lỗi, nhưng cũng làm mỗi luồng tiêu thụ nhiều bộ nhớ hơn. Kẻ tấn công có thể điều chỉnh độ sâu, còn máy chủ lại giảm số luồng chịu được. Bản 0.24.0 bổ sung kiểm soát cần thiết ở thư viện nên vẫn là biện pháp chính.

Kiểm thử mà không gây gián đoạn

Trong môi trường thử nghiệm, dùng bộ sinh dữ liệu hợp lệ nhưng tăng dần độ sâu và đặt trần rõ ràng. Mục tiêu là xác nhận bản mới từ chối thông điệp quá sâu một cách có kiểm soát, không phải tìm ngưỡng làm sập JVM. Đo thời gian phản hồi, bộ nhớ, số luồng và log lỗi; không chạy thử trên hệ thống đang phục vụ khách hàng.

Nguồn tra cứu

CVE-2026-120135 có cho phép chạy mã từ xa không?

Thông báo Apache mô tả tác động chính là từ chối dịch vụ do đệ quy không kiểm soát. Không nên mở rộng thành RCE khi nguồn không khẳng định.

Các binding Thrift ngoài Java có bị ảnh hưởng không?

Cảnh báo này chỉ nêu Java binding. Đội vận hành vẫn nên kiểm tra advisory riêng cho các ngôn ngữ khác thay vì suy ra cùng phạm vi.

Giới hạn kích thước request có đủ không?

Không hoàn toàn. Cấu trúc lồng sâu có thể tương đối nhỏ. Cần nâng 0.24.0, đồng thời giới hạn kích thước, thời gian và nguồn truy cập.

Hành động cho đội backend

Hãy chuẩn bị phiên bản libthrift, loại transport/protocol, cổng RPC, nguồn gọi và log StackOverflowError. Khi cần một môi trường thử nghiệm tách biệt, gửi các thông tin đó qua trang Cloud VPS để trao đổi cấu hình; mục tiêu là kiểm chứng nâng cấp và giới hạn dịch vụ, không dùng thêm RAM để che lỗi.

Cần máy chủ cho workload này?

NOC thuemaychu.vn hỗ trợ chọn CPU, GPU và băng thông. PoC trong 24 giờ.

Bài viết liên quan

Xem tất cả bài viết
GọiFBZaloSalesZaloOA