漏洞簡介
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/ target=_blank class=infotextkey>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將根據返回的報文拋出異常,程序終止:
(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/MPS-2022-64480
- https://lists.apache.org/thread/l5rz7j4rg10o7ywtgknh2f5hxnv6yw3l
- https://github.com/apache/shardingsphere/commit/f3cc852dcbba89244ffcaef15a03ebf29693a14d
關于墨菲安全
墨菲安全是一家為您提供專業的軟件供應鏈安全管理的科技公司,能力包括代碼安全檢測、開源組件許可證合規管理、云原生容器安全檢測、軟件成分分析(SCA)等,豐富的安全工具助您打造完備的軟件開發安全能力(DevSecOps)。
旗下的安全研究團隊墨菲安全實驗室,專注于軟件供應鏈安全相關領域的技術研究,關注的方向包括:開源軟件安全、程序分析、威脅情報分析、企業安全治理等。公司核心團隊來自百度、華為等企業,擁有超過十年的企業安全建設、安全產品研發及安全攻防經驗。
https://www.murphysec.com/






