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ụ.

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ụ.
| Hạng mục | Thông tin |
|---|---|
| Mã | CVE-2026-120135 |
| Mức độ | High, CVSS 4.0 là 8.2 theo Apache |
| Thành phần | Java binding org.apache.thrift:libthrift |
| Bản ảnh hưởng | Trước 0.24.0 |
| Bản sửa | 0.24.0 |
| Tác động | Cạ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
- Tìm
org.apache.thrift:libthrifttrong Maven, Gradle, SBOM và image container; kiểm tra cả phụ thuộc gián tiếp. - 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.
- 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ã.
- Đặ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.
- 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.
- 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ã. - 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
Bảo mậtParse Server CVE-2026-116163: kiểm tra AuthAdapter và nâng cấp
Parse Server có lỗi nghiêm trọng trong AuthAdapter tùy biến, có thể cho phép liên kết danh tính hoặc đăng nhập trái phép. Đây là checklist dành cho đội backend và ứng dụng di động.
Bảo mậtCVE-2026-111497 trong Brotli Ubuntu: kiểm tra và cập nhật
USN-8956-1 cập nhật Brotli cho Ubuntu 22.04–26.10. Quản trị viên cần kiểm tra cả thư viện hệ thống, Python và container xử lý dữ liệu nén.
Bảo mậtCloudflare lộ KV cache giữa yêu cầu LLM: bài học cho SGLang
Sự cố Workers AI cho thấy cấu hình context window lớn hơn vùng KV cache có thể kết hợp với lỗi SGLang để làm lộ dữ liệu giữa người dùng.