漏洞概述 漏洞类型: 拒绝服务 (DoS) CWE: CWE-770: 分配资源无限制或节流 CVSS v3.1 评分: 7.5 (高) 向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H 补丁信息: 该漏洞已在 KeystoneJS Pull Request #9831 中修复 影响范围 受影响组件: - - 描述 应用程序暴露了 GraphQL 关系字段,允许嵌套 查询,并完全支持 、 、 和 等参数。这些解析器不对查询深度、查询复杂度或执行成本施加任何限制。 关系解析器直接将用户控制的参数传递给数据库查询,没有安全措施: 由于每个嵌套级别独立执行,深层嵌套查询可能导致数据库操作的指数级增长。缺乏深度限制或复杂度分析使攻击者能够在单个请求中递归遍历关系。 影响 攻击者可以发送一个精心构造的 GraphQL 查询,导致: 触发指数级数据库查询 耗尽数据库连接池 消耗大量 CPU 和内存 导致严重的性能下降或完全服务中断 如果 GraphQL 端点公开可用,攻击可以在无需认证的情况下进行。 概念验证 (POC) 假设一个常见的模式如 : 恶意查询 请求示例 系统影响 在 100 个用户和每个用户 10 个帖子的情况下,数据库调用数量呈指数增长: 每个额外的嵌套级别显著放大系统负载,迅速耗尽资源。 修复方案 该漏洞已在 PR #9831 中通过引入默认的 GraphQL 查询深度限制得到解决。 变更内容 配置: 在 的 部分添加了 选项,默认设置为 20 层。 验证: 集成了行业标准 包作为 Apollo Server 设置中的严格验证规则。 依赖: 将 添加到 包中。 致谢 报告者: @nedilir(被主要维护者认可为该问题的初始报告者)