Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

漏洞简介

2022年12月22日,Apache 官方公告发布 ShardingSphere-Proxy 5.3.0 之前版本存在身份绕过漏洞(CVE-2022-45347)。当 ShardingSphere-Proxy 使用 MySQL 作为后端数据库时,由于 ShardingSphere-Proxy 在客户端认证失败后没有完全清理数据库会话信息,攻击者可利用未关闭的会话信息绕过 ShardingSphere-Proxy 的 MySQL 身份验证,执行任意 sql 命令。

漏洞分析

Apache ShardingSphere 是一个可将任意数据库转换为分布式数据库的生态系统,ShardingSphere-Proxy 是一个支持 MySQL 和 PostgreSQL 的数据库代理,提供了一个数据库服务器,并封装了数据库二进制协议来支持异构语言。

以 Apache ShardingSphere 5.2.1 版本为例, 用户可通过配置连接 ShardingSphere-Proxy 操作后端 MySQL 数据库:

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(ShardingSphere-Proxy 应用场景示意图)

在该漏洞中存在的交互过程如下:

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(MySQL client 与 ShardingSphere-Proxy 交互图)

以Python为例,当使用错误的账号密码通过 MySQL连接库(如pymysql)连接 ShardingSphere-Proxy:

import pymysql

# MySQL client 连接 ShardingSphere-Proxy
db = pymysql.connect(host='localhost',
                     port=3307,
                     user='root',
                     password='Wrong password',
                     database='sharding_db')

cursor = db.cursor()
cursor.execute("show tables")
results = cursor.fetchall()
print(results)
db.close()

此时pymysql将根据返回的报文抛出异常,程序终止:

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(ShardingSphere-Proxy 身份认证失败抛出异常)

但这时ShardingSphere-Proxy 的 MySQL 身份认证模块并未关闭 MySQL 客户端连接会话:

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(MySQLAuthenticationEngine#authenticate 源码)

攻击者如果构造一个忽略身份验证失败消息的MySQL客户端,则可以通过ShardingSphere-Proxy继续操作后端数据库。例如可以将pymysql中抛出异常的代码注释掉:

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(删除 pymysql#connections.py 中的错误处理逻辑)

再次尝试可以发现在使用错误的账号密码连接后,仍然能够正常使用SQL语句,获得相应的数据返回结果:

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(绕过 ShardingSphere-Proxy 身份验证并操作后端数据库)

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(ShardingSphere-Proxy 后端数据库信息)

ShardingSphere-Proxy v5.3.0 commits 中在 MySQL 客户端认证失败后清理 context 修复此漏洞:

Apache ShardingSphere-Proxy <5.3.0 身份认证绕过(CVE-2022-45347)

(漏洞修复代码)

给开发者的建议

  1. 对失效的会话信息及时清理关闭,防止会话重用的风险。此类风险较为普遍,例如 LibreNMS 在22.10.0之前的版本也出现过类似的问题,由于未对失效的 cookie 进行清理,导致攻击者可利用旧的 cookie 进行登录。
  2. 对临时文件或文件流及时关闭,防止内存泄露或过多的资源消耗导致拒绝服务。

快速检测项目中引用组件存在的安全风险:

https://www.murphysec.com/

参考链接

https://www.oscs1024.com/hd/MPS-2022-64480

https://lists.apache.org/thread/l5rz7j4rg10o7ywtgknh2f5hxnv6yw3l

https://github.com/apache/shardingsphere/commit/f3cc852dcbba89244ffcaef15a03ebf29693a14d

发布者:墨菲安全,转发请注明出处:https://www.murphysec.com/blog/vulnerability-analysis/4606.html

(0)
上一篇 2023年1月9日 15:44
下一篇 2023年2月1日 11:26

相关推荐

  • Fastjson官方再次披露高危漏洞,包括rocketmq、jeecg-boot等近15%的github开源项目受影响

    2022年5月23日,fastjson 官方发布安全通报,fastjson <= 1.2.80 存在反序列化任意代码执行漏洞,在特定条件下可绕过默认autoType关闭限制,可能会导致远程服务器被攻击,风险影响较大。OSCS开源软件社区对此漏洞进行收录,漏洞信息如下: 漏洞评级:高危 影响组件:com.alibaba:fastjson 影响版本:&lt…

    漏洞分析 2023年1月4日
  • CVE-2022-22947 SpringCloud GateWay SPEL RCE 漏洞分析

    漏洞概要 Spring Cloud Gateway 是Spring Cloud 生态中的API网关,包含限流、过滤等API治理功能。 Spring官方在2022年3月1日发布新版本修复了Spring Cloud Gateway中的一处代码注入漏洞。当actuator端点开启或暴露时,可以通过http请求修改路由,路由中包含的恶意filter参数会经过SPEL…

    2023年2月23日
  • Onedev v7.4.14 路径遍历漏洞分析(CVE-2022-38301)

    漏洞简述 OneDev 是开源的一体化轻量DevOps平台,在OneDev 7.4.14及以前版本中存在路径遍历漏洞,具有项目管理权限的攻击者可以将恶意 jar 文件上传到 lib 目录,覆盖原有jar包,攻击者可利用此漏洞在服务器中写入任意文件或远程执行恶意代码。 漏洞分析 问题代码分析 项目管理员可以在 OneDev 的`build`模块对自己的一个项目…

    2023年1月9日
  • Spring Cloud Gateway代码注入漏洞分析(CVE-2022-22947)

    漏洞简述 3月1日,VMware发布了针对Spring Cloud Gateway的漏洞通告(https://tanzu.vmware.com/security/cve-2022-22947),当actuator端点开启并对外暴露时,攻击者可以构造恶意请求实现远程任意代码执行。 Spring Cloud Gateway是Spring Cloud 生态中的AP…

    2023年1月4日
  • Django Trunc 和 Extract 方法存在 SQL 注入漏洞(CVE-2022-34265)

    漏洞简述 Django是一个由Python语言编写的开源Web应用框架,github上star为64.9K。 7月4日,Django官方修复了一个SQL注入漏洞。如果Trunc()的kind参数和Extract()的lookup_name参数没有进行安全过滤,可能会造成SQL注入的风险。 漏洞分析 以Django 4.0版本为例,可以通过官方提供的测试用例进…

    2023年1月4日

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-180-9568

邮件:hi@murphysec.com

工作时间:周一至周五,10:00-19:00,节假日休息

关注公众号

20230105-100741