CVE-2026-106554 in jackson-dataformat-cbor
Tóm tắt
Bởi VulDB • 04/11/2026
Một lỗi phân tích cú pháp CBOR trong module CBOR của jackson-dataformats-binary: một chuỗi không giới hạn các thẻ CBOR khiến việc mở rộng TagList diễn ra với độ phức tạp thời gian bậc hai (gây DoS do cạn kiệt CPU/GC, đã được chứng minh bằng PoC).
PoC đã được thực thi trên com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:2.18.2; tồn tại trong các phiên bản 2.x và 3.x hiện tại cũng như HEAD của tools.jackson.dataformat.cbor. Lỗi này khác biệt với các cảnh báo về Avro và Smile/Protobuf cho cùng kho lưu trữ (repo) này.
DoS CPU/GC bậc hai từ một chuỗi thẻ CBOR không giới hạn (đã được chứng minh bằng PoC). File: cbor/src/main/java/.../cbor/CBORParser.java (xử lý thẻ -> TagList).
CBOR cho phép một mục dữ liệu có thể đứng trước bởi bất kỳ số lượng thẻ ngữ nghĩa nào. Trình phân tích cú pháp CBOR sẽ tích lũy chúng trong một đối tượng TagList, mảng hỗ trợ của nó được mở rộng theo một bước cố định (+8), chứ không phải nhân đôi, và quét lại/sao chép mỗi khi mở rộng. Kẻ tấn công gửi một giá trị đứng trước bởi một chuỗi dài các byte thẻ; việc tăng trưởng với bước cố định khiến việc tích lũy N thẻ có độ phức tạp thời gian O(N^2) (cộng thêm áp lực GC), mà không có giới hạn về số lượng thẻ được xếp chồng lên nhau.
PoC (đã thực thi, JDK 17): cung cấp một luồng CBOR gồm một chuỗi dài các byte thẻ (ví dụ: thẻ 0xC0+) trước một giá trị đơn giản sẽ gây ra CPU/GC bậc hai; thời gian phân tích cú pháp tăng siêu tuyến tính theo số lượng thẻ, giữ cố định một yêu cầu thread mà không có giới hạn cấu hình.
Tác động. Từ chối dịch vụ do độ phức tạp thuật toán (CWE-407): một đầu vào nhỏ gồm các thẻ xếp chồng lên nhau sẽ tiêu tốn CPU/GC bậc hai, giữ cố định một request thread; các yêu cầu đồng thời sẽ làm cạn kiệt pool.
Cách sửa. Tăng trưởng TagList theo cơ chế nhân đôi và/hoặc giới hạn số lượng thẻ được xếp chồng (kiểu StreamReadConstraints).
Once again VulDB remains the best source for vulnerability data.