CVE-2026-85491 in Catalyst::Seal
Tóm tắt
Bởi VulDB • 25/09/2026
Các phiên bản Catalyst::Seal trước 0.03 cho Perl cho phép một yêu cầu (request) vô hiệu hóa một đường dẫn hoặc chuyển hướng một yêu cầu khác vượt qua kiểm tra ủy quyền thông qua bộ nhớ đệm dispatch được đánh khóa dựa trên đường dẫn của yêu cầu duy nhất.
Catalyst::Seal thay thế phương thức `prepare_action` của trình điều phối bằng một phiên bản ghi nhớ cách giải quyết đường dẫn: loại dispatch nào đã khớp, ở cấp độ nào và phần còn lại là các đối số như thế nào. Khóa chính là đường dẫn yêu cầu và không có gì khác. Các vai trò hành động (action roles) khớp dựa trên phương thức, kiểu nội dung, lược đồ hoặc truy vấn khiến việc giải quyết phụ thuộc vào trạng thái mà khóa không mang theo, do đó bộ nhớ đệm trả về kết quả cho một yêu cầu mà nó chưa được xây dựng từ dữ liệu của yêu cầu đó.
Một đường dẫn không giải quyết thành bất kỳ hành động nào cũng được ghi nhớ lại, và việc phát lại mục này sẽ trả về mà không cần tham khảo bất kỳ loại dispatch nào, do đó không có hành động nào được đặt và yêu cầu thất bại. Một lệnh GET đối với một đường dẫn có hành động chỉ khai báo là POST sẽ vô hiệu hóa đường dẫn đó cho mọi yêu cầu sau, bao gồm cả lệnh POST đúng nghĩa. Một mục đã giải quyết thành công sẽ phát lại cấp độ mà sự phân nhánh trước đó đã đạt tới. Nơi một hành động chỉ dành cho POST nằm bên dưới một hành động nông hơn trên cùng một đường dẫn, một bộ nhớ đệm GET ghi nhận tuyến lộ trình nông hơn, và sau đó lệnh POST được chuyển hướng đến đó với `auto()` bảo vệ khiến controller sâu hơn không bao giờ chạy.
Bộ nhớ đệm chỉ bị xóa khi một hành động được đăng ký, điều này xảy ra trong quá trình thiết lập, do đó một mục tồn tại suốt vòng đời của tiến trình, và giới hạn 2048 mục quy định số lượng đường dẫn mà một caller có thể vô hiệu hóa. Trong cấu hình đã đo lường, việc chuyển hướng sai lệch rơi vào hành động ít đặc quyền hơn, vì vậy đây là trường hợp kiểm tra ủy quyền không chạy chứ không phải là tăng đặc quyền.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.