
SQLite 3.53.4 sqlite3_rsync — высокий уровень — удалённый — RCE — инъекция команд через имя файла SSH
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-rsync-ssh
Класс: RCE (инъекция команд) Достижимость: Удалённая (UI:R)
SQLite 3.53.4 (b09c88c) sqlite3_rsync заключает USER@HOST:PATH в кавычки для локального /bin/sh -c. Затем OpenSSH объединяет удалённый argv через пробел для login shell без этих кавычек. Точка с запятой, $(), обратная кавычка или | в PATH выполняются от имени удалённого UID SSH. Это утилита, а не libsqlite3. Переполнение стека readPow2 x>16 от Ada Logics закрыто на этом пине.
| ID | CVE пока нет |
| Класс | RCE (инъекция команд от имени удалённого UID SSH) |
| Достижимость | Удалённая (жертва запускает sqlite3_rsync; UI:R) |
| CWE | CWE-78 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| Продукт | SQLite утилита sqlite3_rsync |
| Затронуто | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) |
| Аутентификация | жертва запускает sqlite3_rsync с враждебным USER@HOST:PATH |
| Лицензия | GNU Affero GPL v3.0 |
| Лаборатория | только 127.0.0.1:18910. Эхо-свидетель. Без reverse shell. |
Поместите ;, $(), обратные кавычки или | в удалённый путь sqlite3_rsync USER@HOST:PATH. Жертва должна запустить утилиту (UI:R). Дополнительная команда выполняется от имени удалённого UID SSH.
append_escaped_arg(..., 1) заключает в одинарные кавычки для локального /bin/sh -c. Эти кавычки поглощаются локально. OpenSSH объединяет оставшийся argv в одну строку удалённой команды. Login shell видит метасимволы без кавычек.
Это не libsqlite3. Стандартный sqlite3.c не содержит этого протокола. Переполнение стека в реплике Ada Logics (ограничение экспоненты readPow2) уже закрыто в 3.53.4.
Двадцать поисков по исходникам тега SQLite version-3.53.4 после волны FTS5 / session в 3.53.2. В стандартной библиотеке всё ещё есть другие остатки (этот пакет — утилита rsync). tool/sqlite3_rsync.c popen2 выполняет /bin/sh -c. hostSeparator разделяет по первому двоеточию. Возврат append_escaped_arg никогда не проверяется.
Ошибочные пути: считать переполнение стека Ada Logics всё ещё открытым; тестировать reverse shell в лаборатории; обращаться к настоящему sshd; закреплять черновик 3.54.0; называть это RCE в библиотеке.
cd lab
./run.sh
Собирает sqlite3_rsync из официального zip-архива исходников 3.53.4. Поддельный OpenSSH объединяет argv после dest. Origin lab@host:;echo SQLITE-RSYNC-SSH-WITNESS>/work/sandbox/pwned.txt. Удалённая команда содержала ;echo без кавычек. Привязка к loopback.
SUCCESS sqlite-rsync-ssh how=openssh-argv-join dest=lab@host remote-has-semicolon=yes SQLITE-RSYNC-SSH-WITNESS
Hex-кодируйте имена файлов, отправляемые узлу (isFilename==2 / --encoded-filenames), как это делает trunk b0db2db (2026-10-07, ANT-2026-31X9HVRR) после этого GA. USER@HOST и --ssh остаются с локальным sh-квотированием. Не полагайтесь на то, что локальные одинарные кавычки выживут при объединении argv в OpenSSH.
b09c88c14082339b66c7b7158d609a771e64ca69)append_escaped_arg, popen2, удалённый ORIGIN/REPLICA SSH argvb0db2db / Fossil eaec2f7f (2026-10-07)