深入解析ApacheSkyWalkingCVE-2020-9483SQL注入漏洞
作者:mobiledu2502936307 | 来源:互联网 | 2024-12-12 17:16
本文详细探讨了ApacheSkyWalking中的SQL注入漏洞(CVE-2020-9483),特别是其影响范围、漏洞原因及修复方法。ApacheSkyWalking是一款强大的应用性能管理工具,广泛应用于微服务架构中。然而,该漏洞使得未经授权的攻击者能够通过特定的GraphQL接口执行恶意SQL查询,从而获取敏感信息。
### 引言
Apache SkyWalking 是一款功能全面的开源应用性能监控系统,支持指标监控、分布式追踪以及分布式系统性能诊断等功能。近期,安全研究社区注意到Apache SkyWalking存在一个严重的SQL注入漏洞,漏洞编号为CVE-2020-9483。此漏洞允许攻击者通过未授权的GraphQL接口发送恶意请求,进而可能泄露敏感数据。
### 调试环境搭建
为了深入研究这一漏洞,首先需要搭建一个可调试的环境。根据GitHub上的官方文档,可以直接从官网下载编译好的Apache SkyWalking版本。具体步骤包括:
1. 下载编译好的SkyWalking版本:[下载链接](https://www.apache.org/dyn/closer.cgi/skywalking//apache-skywalking-apm-.tar.gz)
2. 编辑`oapService.sh`脚本,添加调试命令并启动服务。
3. 下载SkyWalking源码:[源码链接](https://www.apache.org/dyn/closer.cgi/skywalking//apache-skywalking-apm--src.tgz)
4. 将源码导入IDEA,并配置Remote Configuration,设置module classpath为oap-server,完成远程调试环境的搭建。
### 漏洞分析
通过对GitHub上相关Pull Request的分析,我们找到了修复该漏洞的具体代码变更。这些变更主要集中在`getLinearIntValues`、`getMultipleLinearIntValues`等方法中,通过将SQL语句中的动态参数替换为预编译占位符“?”来防止SQL注入。例如,在`getLinearIntValues`方法中,原本直接拼接SQL语句的部分被修改为使用预编译语句,有效阻止了SQL注入攻击。
进一步追踪代码,我们发现在`org.apache.skywalking.oap.server.core.query`包下的`getLinearIntValues`方法中,参数`ids`的处理方式存在安全隐患。继续向上追踪至`org.apache.skywalking.oap.query.graphql.resolver`包中的`MetricQuery`类,该类实现了`GraphQLQueryResolver`接口,负责处理GraphQL查询请求。
### GraphQL查询机制
了解GraphQL的基本查询机制对于理解漏洞成因至关重要。GraphQL查询服务需要实现`GraphQLQueryResolver`接口,该接口本身没有定义任何方法,但通过配置文件中的schema定义,可以指定具体的查询方法。例如,`getLinearIntValues`方法的查询配置如下所示:
```graphql
query HeroNameAndFriends($episode: Episode = JEDI, $withFriends: Boolean = true) {
hero(episode: $episode) {
name
... on Droid {
primaryFunction
}
... on Human {
homePlanet
}
friends @include(if: $withFriends) {
name
}
}
}
```
通过上述查询示例,我们可以构造恶意请求,利用Union注入技术获取当前用户的敏感信息。调试结果显示,`ids`参数中的恶意语句直接拼接到SQL语句中,导致SQL注入漏洞的发生。
### 安全建议
针对此漏洞,建议用户尽快更新到最新版本的Apache SkyWalking,并启用必要的安全措施,如限制未授权的GraphQL接口访问。此外,使用专业的安全产品进行定期的安全检查和防护也是必要的。百度安全智能一体化产品已支持CVE-2020-9483的检测和拦截,有需要的用户可以联系百度安全团队获取更多帮助。
#### 参考链接
- [GitHub Commit](https://github.com/apache/skywalking/commit/4ce2e9e87398efcee4b646af1143f4dc2ae10dc7)
- [OpenWall Security Advisory](https://www.openwall.com/lists/oss-security/2020/06/15/1)
推荐阅读
-
从零开始学习HTML(入门基础)互联网三大基石HTTP协议URL:统一资源定位符HTML:超文本标记语言HTML的Head标签中的常用元素<!--告知 ...
[详细]
蜡笔小新 2024-12-11 08:14:54
-
一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景 ...
[详细]
蜡笔小新 2024-12-12 09:34:47
-
-
本文探讨了在支付项目开发中使用SS5 Socket Server实现内部网络访问外部网络的技术方案。详细介绍了SS5的安装、配置及性能测试过程,旨在为面临相同需求的技术人员提供参考。 ...
[详细]
蜡笔小新 2024-12-12 17:06:17
-
本文详细介绍了黑马旅游网的用户退出功能实现方法,包括前后端代码的具体操作步骤。通过访问Servlet销毁session,并重定向至登录页面。 ...
[详细]
蜡笔小新 2024-12-12 16:55:31
-
本文介绍了如何在Ubuntu 16.04系统上配置Nginx服务器,以便能够通过网络访问存储在服务器上的图片资源。这解决了在网页开发中需要使用自定义在线图标的需求。 ...
[详细]
蜡笔小新 2024-12-12 16:35:25
-
本文详细介绍了Zookeeper中的ZAB协议、节点类型、ACL权限控制机制、角色分工、工作状态、Watch机制、常用客户端、分布式锁实现、默认通信框架以及消息广播和领导选举的流程。 ...
[详细]
蜡笔小新 2024-12-12 12:41:06
-
目录介绍01.CoordinatorLayout滑动抖动问题描述02.滑动抖动问题分析03.自定义AppBarLayout.Behavior说明04.CoordinatorLayo ...
[详细]
蜡笔小新 2024-12-12 11:05:51
-
本文旨在为初学者提供全面的NFT介绍,涵盖其历史发展、特性、应用领域及与Web3技术的关联。 ...
[详细]
蜡笔小新 2024-12-12 11:01:36
-
本文深入探讨了如何利用Java语言结合Tesseract-OCR技术来实现图像中的数字识别功能,旨在为开发者提供详细的指导和实践案例。 ...
[详细]
蜡笔小新 2024-12-12 10:47:15
-
本文详细介绍了如何在Windows平台上安装和配置Jenkins,包括安装步骤、启动方法及基本的系统配置,旨在帮助初次使用者顺利搭建持续集成环境。 ...
[详细]
蜡笔小新 2024-12-11 11:24:02
-
本文档详细介绍了在 CentOS Linux 7.9 系统环境下,如何从源代码编译安装 libwebsockets 库及其示例程序,并提供了编译过程中可能遇到的问题及解决方案。 ...
[详细]
蜡笔小新 2024-12-10 17:48:25
-
java.util.List接口是JavaCollectionsFramework的一个重要组成部分,List接口的架构图如下:本文将通过剖析List接 ...
[详细]
蜡笔小新 2024-12-10 15:35:12
-
近年来,随着信息技术的快速发展,DevOps作为一种新的IT管理理念逐渐受到重视。本文将探讨DevOps的核心概念及其对现代企业的重要意义。 ...
[详细]
蜡笔小新 2024-12-10 04:52:19
-
反向代理是一种重要的网络技术,用于提升Web服务器的性能和安全性,同时保护内部网络不受外部攻击。本文将探讨反向代理的基本概念、与其他代理类型的区别,并详细介绍如何使用Squid配置反向代理。 ...
[详细]
蜡笔小新 2024-12-09 19:15:22
-
本文介绍如何在 C# 中使用一般处理程序(ASHX)将对象转换为 JSON 字符串,并通过设置响应类型为 application/json 来确保客户端能够正确解析返回的数据。同时,文章还提供了 HTML 页面中不依赖 jQuery 的 AJAX 方法来接收和处理这些 JSON 数据的具体实现。 ...
[详细]
蜡笔小新 2024-12-12 11:43:02
-
mobiledu2502936307
这个家伙很懒,什么也没留下!