中危 Grackle 在 GraphQL 查询处理中出现 StackOverflowError (CVE-2023-50730)
CVE编号
CVE-2023-50730利用情况
暂无补丁情况
官方补丁披露时间
2023-12-23漏洞描述
Grackle是一个用函数式Scala编写,并构建在Typelevel堆栈之上的GraphQL服务器。GraphQL规范要求GraphQL片段不能直接或间接形成循环。在Grackle 0.18.0版本之前,该要求没有被检查,具有循环片段的查询将会被接受进行类型检查和编译。尝试编译这样的片段将导致抛出JVM `StackOverflowError`。虽然构造这样的查询需要对应用的GraphQL模式有一定了解,但不需要了解任何特定的性能或其他行为特性。 Grackle使用cats-parse库解析GraphQL查询。在0.18.0版本之前,Grackle使用了cats-parse的`recursive`操作符。然而,`recursive`目前不具备堆栈安全性。在解析器中,`recursive`被用于嵌套选择集、嵌套输入值(列表和对象)以及嵌套的列表类型声明。因此,对于具有深层嵌套选择集、输入值或列表类型的查询可能被构造出来,利用此特性导致在解析过程中抛出JVM `StackOverflowException`。因为这发生在查询处理的非常早期,所以构造这样的查询不需要对应用的GraphQL模式有特定的了解。 小型查询导致堆栈溢出的可能性是一种潜在的拒绝服务漏洞。这可能影响所有使用Grackle的具有不受信任用户的应用程序。两个堆栈溢出问题已经在Grackle的v0.18.0版本中解决。作为解决方法,用户可以在不受信任的输入和Grackle查询处理之间插入一个清理层。解决建议
"将组件 org.typelevel:grackle-core_2.13 升级至 0.18.0 及以上版本"- 攻击路径 本地
- 攻击复杂度 复杂
- 权限要求 普通权限
- 影响范围 越权影响
- EXP成熟度 未验证
- 补丁情况 官方补丁
- 数据保密性 无影响
- 数据完整性 无影响
- 服务器危害 无影响
- 全网数量 N/A
CWE-ID | 漏洞类型 |
CWE-400 | 未加控制的资源消耗(资源穷尽) |
CWE-770 | 不加限制或调节的资源分配 |
Exp相关链接

版权声明
本站原创文章转载请注明文章出处及链接,谢谢合作!
评论