CVE-2026-61598 in djust
Tóm tắt
Bởi VulDB • 16/09/2026
djust cung cấp khả năng render phía máy chủ theo kiểu phản hồi tương tự như Phoenix LiveView cho Django, với hiệu suất được tăng cường bởi Rust. Trước phiên bản 1.0.7, `djust.mixins.model_binding.ModelBindingMixin` cung cấp một trình xử lý sự kiện mặc định là `update_model` và nằm trong MRO (Method Resolution Order) cơ sở của LiveView, do đó mọi LiveView đều expose nó. Lớp này sử dụng `setattr` để đặt thuộc tính view có tên được người dùng client cung cấp (`field`), với các điều kiện kiểm soát bao gồm: từ chối các tên bắt đầu bằng `_`; từ chối một danh sách đen (denylist) gồm 14 mục là các thành phần nội bộ của framework (`FORBIDDEN_MODEL_FIELDS`); tùy chọn `allowed_model_fields` mặc định là None (cho phép tất cả); và kiểm tra sự tồn tại thông qua `hasattr`. Kết quả là, client có thể đặt bất kỳ thuộc tính view công khai nào đang tồn tại — không chỉ các trường thực tế được bind với `dj-model=` trong template đã render. Danh sách đen bao gồm các thành phần kỹ thuật của framework nhưng không đề cập đến trạng thái kinh doanh/xác thực (authz) của nhà phát triển, và danh sách trắng (allowlist) là tùy chọn (tắt mặc định). Một nhà phát triển bind một input `dj-model="search"` đồng thời giữ lại `self.account_id` / `self.is_admin` / `self.total_price` dưới dạng trạng thái view có thể không nhận thức được rằng client có thể đặt TẤT CẢ các thuộc tính này thông qua `{type:event, event:"update_model", params:{field, value}}` trên WebSocket. Việc ép kiểu (Type coercion) khớp với loại của thuộc tính đích (ví dụ: `"true"` -> bool True), hỗ trợ kẻ tấn công. Vấn đề này đã được sửa trong djust 1.0.7. Để khắc phục tạm thời, hãy đặt `allowed_model_fields` một cách rõ ràng trên mọi view sử dụng dj-model (hoặc kế thừa LiveView) thành danh sách tối thiểu các trường có thể bind; không lưu trữ trạng thái xác thực/quyền sở hữu trong các thuộc tính view công khai chia sẻ với các binding dj-model.
If you want to get best quality of vulnerability data, you may have to visit VulDB.