Freenginx và nginx hiện kiểm tra kích thước của biến văn bản trước khi ghi dữ liệu vào đó (+ CVE)


3

TL; DRSau khi gặp phải lỗi tràn bộ đệm thứ ba được phát hiện vào năm 2026 (và theo F5, là lỗi thực thi mã từ xa nếu không có ASLR) khi làm việc với biểu thức chính quy và biến, nhà phát triển freenginx Maxim Dunin đã quyết định đã đến lúc phải khắc phục vấn đề này và thêm chức năng kiểm tra kích thước biến vào sản phẩm của mình trước khi ghi dữ liệu. Nginx sau đó đã sao chép tính năng này, mang lại hy vọng rằng các lỗ hổng CVE mới liên quan đến vấn đề này sẽ được loại bỏ.

Giờ đến phần chi tiết.

Ngày 19 tháng 6 đã được thực hiện. làm Trong Freenginx, trường `end` được thêm vào mô tả biến, cho biết vị trí kết thúc của bộ đệm. Trước đây, chỉ có một con trỏ trỏ đến vị trí bắt đầu (pos), độ dài cần thiết được tính toán trước (và vẫn đang được tính toán), và khi dữ liệu được sao chép vào biến, người ta cho rằng độ dài được tính toán chính xác sẽ đảm bảo dữ liệu vừa với bộ đệm. Thật không may, điều này đã được chứng minh là không chính xác hai lần trong tháng 5 năm 2026 do nhiều sơ suất khác nhau.1 (linux.org.ru), 2 (linux.org.ru)), dẫn đến tràn bộ đệm và hậu quả nghiêm trọng. Giờ đây, khi bộ đệm của một biến được tạo, con trỏ đến cuối bộ đệm cũng được điền đầy, và trước khi ghi dữ liệu vào biến, nếu dữ liệu không vừa, quá trình xử lý yêu cầu sẽ kết thúc bằng lỗi một cách có kiểm soát. Điều này có nghĩa là lỗi tính toán độ dài vẫn có thể xảy ra, nhưng chúng sẽ không lãng phí bộ nhớ; chúng sẽ chỉ làm thất bại yêu cầu HTTP cụ thể. Các cam kết sau (2 (freenginx.org), 3 (freenginx.org)Các biện pháp bảo vệ tương tự đã được thêm vào các phần khác của mã, bao gồm cả mã ghi nhật ký truy cập. Một phiên bản đã được công bố vào ngày 7 tháng 7. Freenginx 1.31.3, bao gồm cả bản sửa lỗi này.

Vào ngày 15 tháng 7, các bản cập nhật này đã được nginx chấp nhận (1 (github.com), 2 (github.com), 3 (github.com)(vì một lý do nào đó mà hoán đổi vị trí thứ hai và thứ ba trong chuỗi), bài toán đã được giao. CVE-2026-42533và F5 đã phát hành một thông báo chính thức. SA (f5.com).

Về lỗ hổng cụ thể lần này: nó xuất hiện khi sử dụng chỉ thị `map` với biểu thức chính quy có tham số được trích xuất. Về các điều kiện khác cần thiết để kích hoạt, văn bản trong mô tả commit và văn bản trong SA có sự khác biệt nhỏ: SA nêu rõ rằng một chuỗi nhất định phải được tính toán tiếp theo, sử dụng tham số được trích xuất còn sót lại từ `map`, trước khi kết quả của chính `map` đó được trả về. Trong mô tả commit trong ví dụ, giữa các bước này, biến chứa tham số được trích xuất cũng được đặt về 0. Tuy nhiên, điều này khó có thể xảy ra trong hầu hết các máy chủ nginx đang hoạt động, và do đó lỗ hổng chỉ ảnh hưởng đến một số ít người. Cũng cần lưu ý rằng bản vá lỗi cho việc tính toán độ dài cụ thể trong trường hợp này không có trong các bản chỉnh sửa đã được commit (hay tôi đã tìm kiếm không tốt?), chỉ có một biện pháp bảo vệ biến vấn đề thành lỗi yêu cầu HTTP được kiểm soát. Mặc dù một số bản vá lỗi đã được thêm vào freenginx vào ngày 19 tháng 7 (5bfb, 7622, b906) tính toán độ dài cho một tình huống tương tự, nhưng không rõ ngay liệu đây có phải là trường hợp đó hay không.

Lỗ hổng này xuất hiện trong phiên bản nginx 0.9.6, các bản vá lỗi đã được tích hợp trong các phiên bản freenginx 1.31.3, nginx 1.30.4, nginx 1.31.3.

Nhóm chuyên gia về an ninh mạng của nginx gửi lời cảm ơn đến một số cá nhân đã độc lập báo cáo lỗ hổng và tuân thủ "các tiêu chuẩn công bố phối hợp":

F5 xin cảm ơn Ming Xuan, DKD (@pidifn), Ji'an Zhou và Zhen Yan của AntAISecurityLab, Rafael Gacek, Sergii Negodiuk của EVO.company, Lam Jun Rong của Calif.io, Mufeed VH của Winfunc Research (winfunc.com), Vexera AI (https://vexera.aiTôi xin gửi lời cảm ơn đến Tu Tran Dinh (@1w4y), Stan Shaw (cyberstan), qianshuidewajueji, zenneth (randomguy6407), Zhenpeng (Leo) Lin của depthfirst, Lukas Johannes Moeller, Melih Tolga Sahin của Vodafone Türkiye, Ayoub Nabil Boubagrat (GitHub: @ayoubnabil), và Milan Jovic (Kljunowsky) vì đã độc lập đưa vấn đề này đến sự chú ý của chúng tôi và tuân thủ các tiêu chuẩn cao nhất về việc công bố thông tin phối hợp.

Trong Freenginx, thông tin đi kèm về bản sửa lỗi thực tế chỉ giới hạn ở thông báo commit. changelogBản sửa lỗi này thậm chí không được gắn nhãn là "bảo mật" hay "sửa lỗi", mà chỉ là "tính năng". Rõ ràng, tác giả không coi vấn đề này là nghiêm trọng. Không thể xác định mối quan hệ giữa các vấn đề được báo cáo bởi những cá nhân nói trên trong F5 và bản cập nhật được sao chép từ freenginx, hoặc liệu họ (hoặc bất kỳ ai khác) đã báo cáo vấn đề này cho tác giả freenginx hay chưa.

Nguồn: linux.org.ru

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster