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.
Advisories
| Source | ID | Title |
|---|---|---|
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.
References
History
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
|
Projects
Sign in to view the affected projects.
Status: PUBLISHED
Assigner: GitHub_M
Published:
Updated: 2026-02-24T02:03:47.094Z
Reserved: 2026-02-11T19:56:24.813Z
Link: CVE-2026-26198
No data.
Status : Undergoing Analysis
Published: 2026-02-24T03:16:01.100
Modified: 2026-02-24T14:13:49.320
Link: CVE-2026-26198
No data.
OpenCVE Enrichment
Updated: 2026-02-24T09:53:28Z
Weaknesses
Github GHSA