CVE-2026-32950

HIGH CVSS 4.0: 8,6 EPSS 0.17%
Обновлено 20 марта 2026
PostgreSQL
Параметр Значение
CVSS 8,6 (HIGH)
Уязвимые версии до 1.7.0
Устранено в версии 1.7.0
Тип уязвимости CWE-78 (Внедрение команд ОС), CWE-89 (SQL-инъекция)
Поставщик PostgreSQL
Публичный эксплойт Нет

SQLBot — это интеллектуальная система запроса данных, основанная на большой языковой модели и RAG. Версии до 1.7.0 содержат критическую уязвимость внедрения SQL в конечной точке /api/v1/datasource/uploadExcel, которая обеспечивает удаленное выполнение кода (RCE), позволяя любому прошедшему проверку подлинности пользователю (даже с самым низким уровнем привилегий) полностью скомпрометировать внутренний сервер. Основная причина двоякая: имена листов Excel объединяются непосредственно в имена таблиц PostgreSQL без очистки (datasource.py#L351), и эти имена таблиц внедряются в операторы COPY SQL через f-строки вместо параметризованных запросов (datasource.py#L385-L388).

Злоумышленник может обойти ограничение на имя листа в 31 символ, используя двухэтапный метод: сначала загрузив обычный файл, строки данных которого содержат команды оболочки, затем загрузив подделанный XML файл, имя листа которого вводит предложение TO PROGRAM 'sh' в SQL. Подтвержденные последствия включают выполнение произвольной команды от имени пользователя postgres (uid=999), утечку конфиденциальных файлов (например, /etc/passwd, /etc/shadow) и полный захват базы данных PostgreSQL. Эта проблема исправлена ​​в версии 1.7.0.

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

SQLBot is an intelligent data query system based on a large language model and RAG. Versions prior to 1.7.0 contain a critical SQL Injection vulnerability in the /api/v1/datasource/uploadExcel endpoint that enables Remote Code Execution (RCE), allowing any authenticated user (even the lowest-privileged) to fully compromise the backend server. The root cause is twofold: Excel Sheet names are concatenated directly into PostgreSQL table names without sanitization (datasource.py#L351), and those table names are embedded into COPY SQL statements via f-strings instead of parameterized queries (datasource.py#L385-L388). An attacker can bypass the 31-character Sheet name limit using a two-stage technique—first uploading a normal file whose data rows contain shell commands, then uploading an XML-tampered file whose Sheet name injects a TO PROGRAM 'sh' clause into the SQL. Confirmed impacts include arbitrary command execution as the postgres user (uid=999), sensitive file exfiltration (e.g., /etc/passwd, /etc/shadow), and complete PostgreSQL database takeover. This issue has been fixed in version 1.7.0.

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

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

Последствия

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

Строка CVSS v4.0