REST代理充当API攻击媒介 在调整现有的API以供GraphQL客户端调用时 , 开发人员通常会将GraphQL实现为 , 在内部REST框架之上的一个瘦代理层 。 如果在没有充分考虑到安全因素的情况下实施此类转换 , 那么恶意用户就可以任意修改API请求中所指定的路径或参数 。 而修改后的请求在解析到后端API时 , 攻击者便可以实施跨站请求伪造( cross-site request forgery , CSRF)了 。
授权缺陷 GraphQL将配置授权和身份验证的检查责任 , 留给了最终实现者 。 即 , GraphQL API在查询级别的解析器、以及加载附加数据的解析器中 , 需要包含多项授权检查 。 而当授权由查询级解析器直接处理时 , 任何未经检查的API实例都会暴露受攻击面 。 而且 , 随着API模式复杂性的增加 , 此类被攻击者利用的漏洞风险也会随之增加 。
自省查询(Introspection Queries)可能会暴露敏感数据 开发人员为了去实现那些无法公开访问的“隐藏”API端点 , 会启用GraphQL服务器之间的API端点通信 , 或通过隐藏的管理功能来实现 。 其中 , GraphQL包含了一个自省功能 , 可以在没有适当授权的情况下 , 轻松地访问各个端点 。 由于自省功能允许客户端访问有关GraphQL架构的信息 , 因此一旦有攻击发生 , 自省查询就可以被用于访问API的相关配置、以及其他客户端的私有信息 。
速率限制难以实施 从本质上说 , GraphQL API是比较复杂的 。 它的每一个查询都会涉及到多项操作 , 并且会消耗大量的服务器资源 。 因此 , 光靠限制接收到的HTTP请求数量 , 并使用默认的速率限制策略是不够的 。 如果两种对象类型之间存在着某种循环关系 , 那么攻击者就可以通过创建各种滥用查询(abusive queries) , 从而让查询本身变得异常复杂 。 以此产生的编排 , 能够对GraphQL应用发起拒绝服务式(DoS)的攻击 。
常见的GraphQL漏洞 下面 , 我们来进一步讨论GraphQL有哪些常见的漏洞 , 可被恶意攻击者在API层面利用 。
GraphQL批处理攻击
GraphQL框架能够支持自省查询的批处理 , 即:能够在一次性调用中 , 向后端API发送多个请求 。 由于减少了请求与服务器之间的往返次数 , 因此这对于减少API请求的开销非常实用 。 不过 , 攻击者也可以使用查询的批处理功能 , 通过反复从API服务器、或数据库处加载数据 , 来编排各种快速且难以被检测到的暴力攻击 。
以下典型示例展示了 , 在搜索数字记录对象标识(Digital Record Object Identification , DROID)对象的不同实例时 , 进行GraphQL批处理查询的代码:
- query {
- droid(id: "2000"){
- name
- }
- second:droid(id: "2001"){
- name
- }
- third:droid(id: "2002"){
推荐阅读
- 安全|Redline Stealer恶意软件:窃取浏览器中存储的用户凭证
- 温小姐|全市首台企业信用报告自助查询机在阳东正式投用
- 恶意|圣诞节前收到解雇邮件?新型 Dridex 网络钓鱼攻击曝光,看到勿点
- Microsoft|微软发布安全基线包:可阻止PrintNightmare、恶意攻击等
- 检测|有变化!西安一码通新增核酸结果查询入口
- Google|Google Play商店中发现感染Joker恶意软件的应用 下载量达50万次
- 视点·观察|浑水在恶意打压股价 还是贝壳在编织“谎言”?
- 最新消息|贝壳回应被浑水做空:坚决抵制任何机构的恶意做空行为
- 苹果|中国绿厂造「芯」不输苹果!发布替代手机黑科技眼镜,健康状态、导航、翻译一眼查询...
- 社交|微博回应被网信办约谈处罚:推进软色情和同质化恶意营销专项治理