破绽简介
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 数据库:
(ShardingSphere-Proxy 利用场景示意图)
在该破绽中存在的交互过程如下
(MySQL client 与 ShardingSphere-Proxy 交互图)
以Python为例,当应用谬误的账号密码通过 MySQL连贯库(如pymysql)连贯 ShardingSphere-Proxy:
import pymysql# MySQL client 连贯 ShardingSphere-Proxydb = 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将依据返回的报文抛出异样,程序终止:
(ShardingSphere-Proxy 身份认证失败抛出异样)
但这时ShardingSphere-Proxy 的 MySQL 身份认证模块并未敞开 MySQL 客户端连贯会话:
(MySQLAuthenticationEngine#authenticate 源码)
攻击者如果结构一个疏忽身份验证失败音讯的MySQL客户端,则能够通过ShardingSphere-Proxy持续操作后端数据库。例如能够将pymysql中抛出异样的代码正文掉:
(删除 pymysql#connections.py 中的错误处理逻辑)
再次尝试能够发现在应用谬误的账号密码连贯后,依然可能失常应用SQL语句,取得相应的数据返回后果:
(绕过 ShardingSphere-Proxy 身份验证并操作后端数据库)
(ShardingSphere-Proxy 后端数据库信息)
ShardingSphere-Proxy v5.3.0 commits 中在 MySQL 客户端认证失败后清理 context 修复此破绽:
(破绽修复代码)
给开发者的倡议
- 对生效的会话信息及时清理敞开,避免会话重用的危险。此类危险较为广泛,例如 LibreNMS 在22.10.0之前的版本也呈现过相似的问题,因为未对生效的 cookie 进行清理,导致攻击者可利用旧的 cookie 进行登录。
- 对临时文件或文件流及时敞开,避免内存泄露或过多的资源耗费导致拒绝服务。
参考链接
- https://www.oscs1024.com/hd/M...
- https://lists.apache.org/thre...
- https://github.com/apache/sha...
对于墨菲平安
墨菲平安是一家为您提供业余的软件供应链平安治理的科技公司,能力包含代码平安检测、开源组件许可证合规治理、云原生容器平安检测、软件成分剖析(SCA)等,丰盛的平安工具助您打造齐备的软件开发平安能力(DevSecOps)。
旗下的平安钻研团队墨菲平安实验室,专一于软件供应链平安相干畛域的技术钻研,关注的方向包含:开源软件平安、程序剖析、威逼情报分析、企业平安治理等。公司外围团队来自百度、华为等企业,领有超过十年的企业平安建设、平安产品研发及平安攻防教训。