‘ormar’Python库中发现严重SQL注入漏洞

admin 2026-03-03 05:33:49 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 流行的Python异步ORM库ormar存在严重SQL注入漏洞CVE-2026-26198,CVSS评分9.8。漏洞源于min和max聚合函数未验证用户输入的列名,直接传递给sqlalchemy.text(),导致攻击者可注入任意SQL子查询读取整个数据库内容。该漏洞自2021年3月在0.9.9版本引入,影响直至0.22.0的所有版本,下载量超441万次,对使用FastAPI等异步应用构成广泛威胁。维护者已在0.23.0版本修复,建议用户立即升级。 综合评分: 88 文章分类: 漏洞预警,WEB安全,应用安全,供应链安全,漏洞分析


cover_image

‘ormar’ Python 库中发现严重 SQL 注入漏洞

sec随谈 sec随谈

sec随谈

2026年2月26日 08:47 北京

流行的 Python 异步迷你对象关系映射器 (ORM) ormar 被发现存在重大安全 漏洞。ormar 为使用 Postgres、MySQL 和 SQLite 的开发人员提供桥梁。该漏洞编号为 CVE-2026-26198,CVSS 评分为 9.8,属于严重级别,可能导致整个数据库暴露给未经身份验证的攻击者。

该库的下载量超过 441 万次,是许多 FastAPI 和异步 Python 应用程序的必备工具,因此这项发现的潜在影响范围非常广泛。

该漏洞存在于库的聚合函数调用中,具体来说是 min() 和 max() 方法。根据技术报告,问题在于 ORM“在没有任何验证或清理的情况下,直接将用户提供的列名传递给 sqlalchemy.text() 来构建 SQL 表达式”。

虽然像 sum() 和 avg() 这样的函数受到类型检查的部分保护,但 min() 和 max() 完全绕过了这些安全措施。这一疏忽使得攻击者可以将任意字符串注入到原始 SQL 查询中。报告警告说:“任何未经授权的用户都可以利用此漏洞,通过将子查询作为列参数注入,读取整个数据库内容,包括与查询模型无关的表。”

安全分析追溯到该漏洞的根源可以追溯到 2021 年 3 月 12 日。存在漏洞的代码是在 0.9.9 版本中引入的,并且在近四年内完全没有改变。

研究人员指出:“存在漏洞的 SelectAction.get_text_clause() 方法和 min()/max() 聚合函数是同时引入的……而且自那以后,存在漏洞的代码从未被修改过。” 这意味着目前任何运行 ORMA 版本介于 0.9.9 和 0.22.0 之间的应用程序都存在风险。

由于许多开发者都遵循库的官方文档,因此该漏洞通常隐藏在标准的 API 设计中。报告强调,“具有用户可选聚合字段的 REST API”或“接受字段名作为参数的 GraphQL 解析器”是主要目标。

研究人员使用标准的 FastAPI 应用程序演示了这种攻击,证明“任何将用户可控输入传递给 Model.objects.min()Model.objects.max() 的 API 端点都会变成一个完整的 SQL 注入入口点”。该攻击已被证实适用于所有主流的受支持后端,包括 SQLite、PostgreSQL 和 MySQL。

ormar 的维护者已迅速采取行动,修复了这个关键漏洞。该漏洞已在 0.23.0 版本中得到彻底解决。

强烈建议开发人员和系统管理员审核其 Python 环境并立即升级其 ormar 依赖项。

参考链接:

https://github.com/collerek/ormar/security/advisories/GHSA-xxh2-68g9-8jqr


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:sec随谈 sec随谈 sec随谈《‘ormar’ Python 库中发现严重 SQL 注入漏洞》

评论:0   参与:  0