Ormar is a async mini ORM for Python. In versions 0.9.9 through 0.22.0, when performing aggregate queries, Ormar ORM constructs SQL expressions by passing user-supplied column names directly into `sqlalchemy.text()` without any validation or sanitization. The `min()` and `max()` methods in the `QuerySet` class accept arbitrary string input as the column parameter. While `sum()` and `avg()` are partially protected by an `is_numeric` type check that rejects non-existent fields, `min()` and `max()` skip this validation entirely. As a result, an attacker-controlled string is embedded as raw SQL inside the aggregate function call. Any unauthorized user can exploit this vulnerability to read the entire database contents, including tables unrelated to the queried model, by injecting a subquery as the column parameter. Version 0.23.0 contains a patch.

Project Subscriptions

Vendors Products
Collerek Subscribe
Advisories
Source ID Title
Github GHSA Github GHSA GHSA-xxh2-68g9-8jqr ormar is vulnerable to SQL Injection through aggregate functions min() and max()
Fixes

Solution

No solution given by the vendor.


Workaround

No workaround given by the vendor.

History

Wed, 25 Feb 2026 19:45:00 +0000

Type Values Removed Values Added
CPEs cpe:2.3:a:collerek:ormar:*:*:*:*:*:python:*:*

Wed, 25 Feb 2026 08:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'poc', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Tue, 24 Feb 2026 10:00:00 +0000

Type Values Removed Values Added
First Time appeared Collerek
Collerek ormar
Vendors & Products Collerek
Collerek ormar

Tue, 24 Feb 2026 03:00:00 +0000

Type Values Removed Values Added
Description Ormar is a async mini ORM for Python. In versions 0.9.9 through 0.22.0, when performing aggregate queries, Ormar ORM constructs SQL expressions by passing user-supplied column names directly into `sqlalchemy.text()` without any validation or sanitization. The `min()` and `max()` methods in the `QuerySet` class accept arbitrary string input as the column parameter. While `sum()` and `avg()` are partially protected by an `is_numeric` type check that rejects non-existent fields, `min()` and `max()` skip this validation entirely. As a result, an attacker-controlled string is embedded as raw SQL inside the aggregate function call. Any unauthorized user can exploit this vulnerability to read the entire database contents, including tables unrelated to the queried model, by injecting a subquery as the column parameter. Version 0.23.0 contains a patch.
Title ormar is vulnerable to SQL Injection through aggregate functions min() and max()
Weaknesses CWE-89
References
Metrics cvssV3_1

{'score': 9.8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'}


Projects

Sign in to view the affected projects.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-02-24T20:35:44.673Z

Reserved: 2026-02-11T19:56:24.813Z

Link: CVE-2026-26198

cve-icon Vulnrichment

Updated: 2026-02-24T20:29:22.532Z

cve-icon NVD

Status : Analyzed

Published: 2026-02-24T03:16:01.100

Modified: 2026-02-25T19:41:02.680

Link: CVE-2026-26198

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-02-24T09:53:28Z

Weaknesses