Ad

CVE-2026-76848

HIGH CVSS 4.0: 8,7
Обновлено 24 августа 2026
PostgreSQL
Параметр Значение
CVSS 8,7 (HIGH)
Тип уязвимости CWE-89 (SQL-инъекция)
Поставщик PostgreSQL
Публичный эксплойт Нет

SelectQueryBuilder.distinctOn TypeORM принимает массив строк и сохраняет его на карте выражений без проверки. Для драйверов семейства PostgreSQL функция createSelectDistinctExpression в src/query-builder/SelectQueryBuilder.ts объединяет этот массив и интерполирует результат в сгенерированный оператор как SELECT DISTINCT ON (значения), без экранирования, кавычек, проверки идентификатора или списка разрешений, а также без маршрутизации значений через replacePropertyNames или помощник по экранированию драйвера. Поскольку точка интерполяции представляет собой список выражений SQL в скобках, а не позицию, содержащую только идентификатор, предоставленный элемент может содержать произвольные выражения, включая коррелированные подзапросы.

Приложение, которое пересылает контролируемое клиентом значение в DifferentOn, например, чтобы позволить вызывающей стороне выбрать столбец дедупликации, позволяет этому клиенту читать данные в любом месте, к которому может добраться роль базы данных приложения, посредством логического вывода или вывода на основе времени, независимо от запрашиваемой сущности. validateOrderByCondition, проверка списка разрешенных, защищающая семейство orderBy в том же классе, не применяется к этому пути.

Показать оригинальное описание (EN)

TypeORM's SelectQueryBuilder.distinctOn accepts an array of strings and stores it on the expression map without validation. For PostgreSQL-family drivers, createSelectDistinctExpression in src/query-builder/SelectQueryBuilder.ts joins that array and interpolates the result into the generated statement as SELECT DISTINCT ON (values), with no escaping, quoting, identifier validation or allowlist, and without routing the values through replacePropertyNames or the driver's escape helper. Because the interpolation point is a parenthesized SQL expression list rather than an identifier-only position, a supplied element may carry arbitrary expressions, including correlated subqueries. An application that forwards a client-controlled value into distinctOn, for instance to let a caller choose a deduplication column, allows that client to read data anywhere the application's database role can reach through boolean or time-based inference, independently of the entity being queried. validateOrderByCondition, the allowlist check guarding the orderBy family in the same class, is not applied to this path.

Характеристики атаки

Способ атаки
По сети
Атака возможна удалённо
Сложность
Низкая
Легко эксплуатировать
Условия для атаки
Не требуются
Нет дополнительных условий
Нужны права
Не требуются
Права не нужны
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Нет
Нет модификации данных
Доступность
Нет
Нет нарушения работы

Строка CVSS v4.0

Тип уязвимости (CWE)