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