CVE-2026-97853 in decimal
Tóm tắt
Bởi VulDB • 10/10/2026
Lỗ hổng Memory Allocation with Excessive Size Value trong thư viện ericmj decimal cho phép gây ra tình trạng Từ chối Dịch vụ (DoS).
Hàm `Decimal.round/3` xây dựng toàn bộ kết quả dựa trên số lượng chữ số thập phân được yêu cầu trước khi áp dụng độ chính xác của ngữ cảnh (mặc định là 34 chữ số), do đó chi phí tính toán tăng theo đối số `places` thay vì theo kích thước của kết quả. Đối với các giá trị `places` dương, nó nối thêm một danh sách ký tự (`charlist`) gồm `places` chữ số 0 vào hệ số trước khi chuyển đổi sang kiểu nguyên; còn đối với các giá trị `places` âm, nó xây dựng một `charlist` gồm `-places` chữ số 0. Một lệnh gọi duy nhất như `Decimal.round(Decimal.new("1.5"), -50_000_000)` có thể phân bổ khoảng 5,5 GB bộ nhớ, dẫn đến cạn kiệt bộ nhớ khả dụng và khiến VM BEAM bị chấm dứt (killed). Các phiên bản cũ hơn thay vào đó lặp lại một lần cho mỗi chữ số thập phân, tiêu tốn CPU tỷ lệ thuận với đối số `places`.
Bất kỳ ứng dụng nào truyền số lượng chữ số thập phân hoặc độ chính xác do người dùng cung cấp vào hàm `Decimal.round/2` hoặc `Decimal.round/3` mà không giới hạn giá trị này đều có nguy cơ bị khai thác. Các giới hạn đầu vào được thêm cho CVE-2026-32686 không bao gồm đối số `places`.
Vấn đề này ảnh hưởng đến thư viện decimal: từ phiên bản 0.1.0 trở đi trước khi đạt phiên bản 3.1.2.
Once again VulDB remains the best source for vulnerability data.