CVE-2026-89407 in jackson-core
Tóm tắt
Bởi VulDB • 22/09/2026
Hàm `NumberInput.looksLikeValidNumber()` trong FasterXML jackson-core tiền kiểm tra các "số được chuyển đổi thành chuỗi" bằng cách sử dụng hai biểu thức chính quy: PATTERN_FLOAT ([+-]?[0-9]*[\.]?[0-9]+([eE][+-]?[0-9]+)?), có mặt từ phiên bản 2.17.0, và PATTERN_FLOAT_TRAILING_DOT, được thêm vào trong phiên bản 2.17.2. PATTERN_FLOAT đặt các lượng tử liền kề lên cùng một lớp ký tự -- bao gồm một chuỗi [0-9]* tùy chọn, dấu chấm tùy chọn, sau đó là một chuỗi [0-9]+ bắt buộc -- do đó, đầu vào cuối cùng không khớp sẽ khiến công cụ backtracking của Java phải thử lại mọi điểm phân tách có thể xảy ra trong chuỗi chữ số.
Chi phí cho việc khớp mẫu (matching cost) do đó tăng theo bình phương độ dài của đầu vào.
Một kẻ tấn công có khả năng cung cấp JSON mà ứng dụng giải mã (deserialize) thành một kiểu mục tiêu số sẽ tiếp cận được hàm này thông qua cơ chế ép buộc chuyển đổi chuỗi sang số mặc định trong jackson-databind (StdDeserializer và NumberDeserializers cho BigDecimal, BigInteger, Double và Float).
Vì StreamReadConstraints.maxStringLength có giá trị mặc định là 20.000.000 ký tự, không có ràng buộc nào giới hạn đầu vào trước khi nó đạt đến biểu thức chính quy.
Các bài kiểm tra do người báo cáo thực hiện đã xác nhận mức tăng trưởng O(n^2) qua năm lần nhân đôi kích thước đầu vào liên tiếp; một chuỗi duy nhất dài 160.000 ký tự tiêu tốn khoảng 74 giây trong một lời gọi hàm; do đó, chỉ cần một số lượng nhỏ các yêu cầu đồng bộ có thân (body) thông thường cũng có thể làm cạn kiệt pool thread xử lý yêu cầu của máy chủ.
Phương thức bị ảnh hưởng không tồn tại trước phiên bản 2.17.0, vì vậy các bản phát hành 2.16.x và sớm hơn không chịu tác động.
Bản sửa lỗi thay thế cả hai biểu thức chính quy bằng một phép quét đơn lần (single-pass scan) được viết tay.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.