购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.5 Apache SkyWalking管理插件GraphQL API漏洞

作为一项新兴的技术,GraphQL在很多互联网应用中开始被使用,Apache SkyWalking也对外部提供了GraphQL API的接口,本节将要介绍的漏洞就与GraphQL API技术相关。

3.5.1 GraphQL API漏洞基本信息

自从2015年GraphQL被Facebook推出以来,在互联网应用中得到了广泛的使用。随着GraphQL使用范围的扩大,新技术带来的安全问题也逐渐增多。近日,NVD发布的CVE编号为CVE-2020-9483的漏洞就与GraphQL相关,下面带读者一起来看看这个漏洞的详情。

漏洞类型: API5-失效的功能级授权。

漏洞难度: 高。

报告日期: 2020-07-10。

信息来源: https://nvd.nist.gov/vuln/detail/CVE-2020-9483。

Apache SkyWalking是一款开源、功能强大的应用性能监控系统,尤其是针对微服务、云原生和面向容器的分布式系统的性能监控。它通过直观和友好的用户操作界面为用户提供包括指标监控、分布式追踪、分布式系统性能诊断等功能,受到国内很多互联网公司的欢迎,比如华为、阿里巴巴、腾讯微众银行等。在其63.0.0~6.6.0、7.0.0版本中,如果使用H2/MySQL/TiDB作为数据存储,通过GraphQL协议查询元数据时,存在一个SQL注入漏洞,允许攻击者访问未授权的数据。其利用过程如图3-11所示。

●图3-11 CVE-2020-9483漏洞利用示意图

3.5.2 GraphQL API漏洞利用过程

GraphQL协议导致的SQL注入漏洞,在原理上与普通的Web安全中的SQL注入漏洞并无本质的差别。这点,从GitHub上对应的issue下的pull request修改的代码内容可以看出,如图3-12所示。

●图3-12 GitHub源码库修复CVE-2020-9483漏洞的代码片段

在提交的新代码中(如图33-12中方框标注部分),作者将SQL字符串拼接方式的代码改为预编译方式的SQL语句,这是修复SQL注入的普遍解决思路。GraphQL协议导致的SQL注入漏洞与传统Web安全中所说的SQL注入漏洞的不同在于请求时的应用协议为GraphQL。在SkyWalking的基础配置中,有对GraphQL请求接入点的配置项,如图33-13所示。

●图3-13 Apache SkyWalking配置文件中关于GraphQL的配置代码段

当Apache SkyWalking运行时,可以通过此访问入口/graphql进行GraphQL请求和响应。可以通过构造一个非恶意的请求参数,验证请求链路的正确性,响应结果如图3-14所示。

●图3-14 Apache SkyWalking GraphQL请求样例

在Apache SkyWalking公开的源码库中,有对GraphQL请求参数定义的相关schema配置文件。其访问地址为https://github.com/apache/skywalking-query-protocol,其中包含了当前版本中使用GraphQL协议查询的详细定义文件,如图3-15所示。

●图3-15 Apache SkyWalking GraphQL查询协议定义

熟悉GraphQL协议的攻击者,在请求的JSON对象中构造普通SQL注入请求参数,访问GraphQL查询路径/graphql,即可达到SQL注入的目的。

3.5.3 GraphQL API漏洞启示

继续利用思维导图,来对漏洞利用过程做一下回顾,如图3-16所示。

●图3-16 CVE-2020-9483漏洞利用关键步骤

作为一项新的API技术,GraphQL正在迅速地普及。因其具有内置查询语言的特性,使得请求的参数都包含在JSON数据结构中,对传统的安全测试人员和网络安全防护产品来说,如果不熟悉其协议或无法检测JSON数据结构中的攻击载荷,都将是一个大的安全挑战。本案例中,攻击者将Apache SkyWalking 默认端口和默认请求路径/graphql 作为攻击入口,是漏洞被利用成功的第一个关键因素。如果修改默认端口和默认请求路径,将提高发现注入点的难度。研发人员在编写代码时,使用SQL字符串拼接的方式组装SQL查询语句,是漏洞能被利用成功的根本原因。如果不使用字符串拼接的方式,调整为预编译方式来执行SQL语句,将可以避免SQL注入漏洞的产生。

当前的这个案例中,漏洞利用所需要的技术除了GraphQL协议外,并无其他新颖的攻击手法,漏洞利用过程也不复杂。作为技术人员,在使用一项新技术时,除了要评估新技术给业务带来的价值以外,也应考虑新技术的使用成本和风险,充分了解新技术的优缺点,扬长避短,发挥新技术优势的同时也要规避因使用新技术带来的不必要的风险。 +YIFmBkZX0bynKRbZCuBK2lPzyRuE0d94Oe1/zY8Rexy3YBVoXxk5P6g1uAitLkq

点击中间区域
呼出菜单
上一章
目录
下一章
×