CVE-2026-61598 in djust信息

摘要

由 VulDB • 2026-09-16

djust 为 Django 提供了基于 Rust 高性能驱动的、类似 Phoenix LiveView 的响应式服务端渲染功能。在版本 1.0.7 之前,`djust.mixins.model_binding.ModelBindingMixin` 提供了一个默认的 `update_model` 事件处理程序,并且是 LiveView 基本方法解析顺序(MRO)的一部分,因此每个 LiveView 都会暴露该处理程序。它通过客户端提供的名称(即 `field` 参数)对视图属性执行 `setattr` 操作,其限制条件仅包括:拒绝以 `_` 开头的名称;拒绝包含框架内部实现的 14 项禁止列表(`FORBIDDEN_MODEL_FIELDS`);可选的 `allowed_model_fields` 默认为 None(即允许所有字段);以及检查是否存在该属性。因此,客户端可以设置任何公开且已存在的视图属性——而不仅仅是渲染模板中通过 `dj-model=` 绑定的那些字段。禁止列表涵盖了框架的基础设施部分,但未涉及开发者的业务逻辑或授权状态,而白名单则是可选的(默认关闭)。如果开发者绑定了一个 `dj-model="search"` 输入框,同时还将 `self.account_id`、`self.is_admin` 和 `self.total_price` 作为视图状态保留,他们可能未意识到客户端可以通过 WebSocket 发送 `{type:event, event:"update_model", params:{field, value}}` 来设置所有这些属性。类型转换会匹配目标属性的类型(例如 `"true"` 转换为布尔值 True),从而协助攻击者利用此漏洞。该问题已在 djust 1.0.7 中修复。作为变通方案,应在每个使用 dj-model(或继承 LiveView)的视图上显式设置 `allowed_model_fields` 为可绑定字段的最小列表;不要将授权/所有权状态保留在与 dj-model 绑定共享视图的公开视图属性中。

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

来源

Want to know what is going to be exploited?

We predict KEV entries!