CVE-2026-33286Graphiti是一个基于模型的JSON:API框架。在1.10.2版本之前,该框架存在任意方法执行漏洞,影响了其JSONAPI写入功能。攻击者可以通过构造恶意的JSONAPI载荷,利用任意关系名称来调用底层模型实例、类或其关联对象上的任何公共方法。该漏洞源于`Graphiti::Util::ValidationResponse#all_valid?`方法在未验证资源配置的sideloads的情况下,递归调用`model.send(name)`。任何向不可信用户暴露Graphiti写入端点(创建/更新/删除)的应用程序均受影响,可能导致数据破坏或服务中断。
该漏洞的核心在于Graphiti处理JSONAPI写入请求时的验证逻辑缺陷。当应用程序接收到包含关系数据的JSONAPI载荷进行创建或更新操作时,`Graphiti::Util::ValidationResponse`类的`all_valid?`方法会被调用。该方法负责验证载荷中的关系是否有效。然而,在受影响版本中,代码直接从用户提供的JSONAPI载荷中提取关系名称,并将其作为参数传递给`model.send(name)`方法进行递归调用,而未对这些名称进行白名单验证或与资源配置的sideloads进行比对。由于Ruby的`send`方法可以调用对象的任意公共方法,攻击者可以利用此机制绕过预期的业务逻辑,调用模型实例、类或关联对象上的敏感方法(如`delete`、`destroy`或系统命令执行方法)。尽管`send`通常限制于公共方法,但在Rails等框架中,这足以造成严重的完整性和可用性破坏。