
SQLite 3.53.4 CLI — High — Local — Инъекция команд — go и слэш-терминаторы, затем dot-команда
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cli-go
Класс: Внедрение команд Доступ: Локальный
SQLite 3.53.4 (b09c88c) по умолчанию sqlite3 CLI по-прежнему воспринимает SQL Server go и Oracle / как терминаторы инструкций. line_is_command_terminator переписывает эту строку в ;. Следующая строка с пустым SQL-буфером — это do_meta_command, поэтому .shell / .output / .read выполняются от имени UID оператора.
--safe по-прежнему блокирует .shell. Этот контроль сохраняется. По умолчанию sqlite3 не включает --safe. Не libsqlite3. Oracle — это echo строки-свидетеля.
| ID | CVE пока нет |
| Класс | Внедрение команд (CLI-терминатор go / /, затем более поздняя dot-команда) |
| Доступ | Локальный (жертва запускает sqlite3 по умолчанию на SQL/скрипте атакующего без --safe; UI:R) |
| CWE | CWE-78 |
| CVSS | High: 7.8 CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| Продукт | SQLite (sqlite3 CLI) |
| Затронуто | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc |
| Аутентификация | жертва передаёт скрипт в sqlite3 по умолчанию; без --safe |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1:18920. Свидетель SQLITE-CLI-GO-WITNESS. |
После незавершённого SQL в скрипте, который оператор передаёт в sqlite3 без --safe, строка go или /, а затем .shell / .output / .read выполняются от имени UID оператора.
Точка с запятой уже завершает инструкцию. Остаток — это завершающий SQL без ;, поэтому обёртка, считавшая инструкцию всё ещё открытой, всё равно выполняет следующую dot-команду. .shell — это system(). Оракул лаборатории — это echo свидетеля. Не reverse shell.
Двадцать поисков по исходникам 3.53.4 после OpenLiteSpeed. Последний GA, не черновик 3.54.0. Дополнения CLI — не библиотека по умолчанию. --safe — документированный сток для недоверенных скриптов (CVE-2022-46908). Он по-прежнему блокирует .shell. По умолчанию sqlite3 его не включает.
src/shell.c.in по-прежнему содержит путь совместимости с SQL Server / Oracle. Trunk ac6ac0c22d (2026-10-08) отключает его, если не задан SQLITE_SHELL_LEGACY_COMMAND_TERMINATOR. Этот коммит идёт после данного GA.
Уже зафиксированные ошибочные пути: трактовка точки с запятой как того же остатка; повторная подача CVE-2022-46908; ожидание, что --safe включён по умолчанию; называние этого RCE в libsqlite3; использование reverse shell в качестве оракула; привязка к 3.54.0 (черновик).
cd lab
./run.sh
Собирает официальный sqlite-src-3530400 в стандартный Unix sqlite3 (--disable-readline). Compose sqlite-cli-go. Фиктивный TCP на 127.0.0.1:18920. CLI по умолчанию воспринял go и / как терминаторы, а затем выполнил .shell echo SQLITE-CLI-GO-WITNESS. --safe вывел cannot run .shell in safe mode. Привязка к loopback.
SUCCESS sqlite-cli-go how=go-then-dot-shell slash=yes safe=blocked SQLITE-CLI-GO-WITNESS
Прекратить воспринимать go и / как терминаторы — именно это делает trunk ac6ac0c22d, если не задан -DSQLITE_SHELL_LEGACY_COMMAND_TERMINATOR. До тех пор запускайте недоверенные скрипты с --safe. --safe — это контроль, который по-прежнему работает.
b09c88c14082339b66c7b7158d609a771e64ca69)src/shell.c.in line_is_command_terminator, перезапись process_input, do_meta_command, .shell system() после failIfSafeMode--safe--safe