Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
sqlite-collate-depth — SQLite 3.53.4 — высокий — локальный — сбой — цепочка COLLATE обходит SQLITE_LIMIT_EXPR_DEPTH | Kitploit
Инструменты/GitHubGitHub/abraxas/sqlite-collate-depth
Статический анализАнализ уязвимостейЭксплуатацияФаззингБезопасность Баз Данных
GitHubabraxas/sqlite-collate-depth

sqlite-collate-depth

SQLite 3.53.4 — высокий — локальный — сбой — цепочка COLLATE обходит SQLITE_LIMIT_EXPR_DEPTH

Репозиторий
187 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Abraxas Labs - sqlite-collate-depth

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-collate-depth

Разбор: https://abraxaslabs.tech/research/sqlite-collate-depth

sqlite-collate-depth

Класс: Crash Доступ: Локальный

SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

Грамматическое действие COLLATE никогда не вызывает sqlite3ExprCheckHeight. sqlite3ExprAddCollateToken выделяет узел TK_COLLATE с nHeight, всё ещё равным 1, а затем подвешивает предыдущее выражение к pLeft. Обычные операторы проходят через sqlite3PExpr и получают задокументированный SQLITE_LIMIT_EXPR_DEPTH (по умолчанию 1000). Этот оператор — нет.

Обходчик всё равно рекурсивно обрабатывает каждый pLeft. EP_Skip предназначен для affinity, а не для sqlite3WalkExprNN. Цепочка из 50 узлов возвращает 1. То же самое для 8k и 40k — за пределами лимита глубины. 120k вызывает переполнение стека ASan в sqlite3WalkExprNN (rc=134). Не RCE.

Каноническое дерево — https://sqlite.org/src. GitHub sqlite/sqlite — это зеркало Fossil. Официальный zip sqlite-src-3530400. Библиотека в общественном достоянии. Этот пакет распространяется под AGPLv3.

IDCVE пока нет
КлассCrash (переполнение стека ASan в sqlite3WalkExprNN; RCE не продемонстрирован)
ДоступЛокальный (недоверенный SQL или внедрённое VIEW)
CWECWE-674, CWE-770
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
ПродуктSQLite 3.53.4
Затронуто3.53.4 (b09c88c); остаток от более поздней проверки высоты COLLATE в trunk
Аутентификациянедоверенный SQL или VIEW; load_extension по умолчанию остаётся выключенным
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:18800. ASan-амальгама. Свидетельство краха.

Что может сделать атакующий

Подать длинную постфиксную цепочку COLLATE BINARY в виде SQL или внедрить её в VIEW внутри недоверенного .db. Процесс-хост обходит цепочку и погибает на стеке C. Задокументированный лимит глубины выражений никогда не срабатывает для этого оператора.

Достаточно SELECT 1 COLLATE BINARY COLLATE BINARY .... Та же форма в CREATE VIEW v AS SELECT 1 COLLATE BINARY ..., затем SELECT * FROM v на новом соединении. Значение по умолчанию SQLITE_LIMIT_SQL_LENGTH (1e9) допускает цепочку размером ~1,8 МБ, которая переполнила 8-мегабайтный стек в этой лаборатории.

Это крах процесса-встраивателя. Это не контроль над указателем инструкций. load_extension остаётся выключенным.

Как я это нашёл

Двадцать поисков по исходникам тега SQLite version-3.53.4 после OpenLiteSpeed. Последняя GA-версия, а не черновик 3.54.0. sqlite.org/security.html рассматривает недоверенный SQL и недоверенный .db как первостепенные. load_extension по умолчанию выключен.

parse.y для COLLATE — это три строки:

expr(A) ::= expr(A) COLLATE ids(C). {
  A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
}

sqlite3ExprAddCollateToken устанавливает pNew->pLeft = pExpr и EP_Collate|EP_Skip. sqlite3ExprAlloc оставил nHeight = 1. Нет sqlite3ExprCheckHeight. sqlite3PExpr делает обе эти вещи для любого другого бинарного оператора.

Неверные пути: трактовка 8k COLLATE как краха (он вернул 1); трактовка 40k как краха (он также вернул 1, намного превысив SQLITE_LIMIT_EXPR_DEPTH 1000); потребовалось 120k, прежде чем ASan умер в sqlite3WalkExprNN.

Это G1 из четырнадцати остатков на пине. Родственные — другие посты.

Лаборатория

cd lab
./run.sh

ASan-амальгамация из официального sqlite-src-3530400 (резервный клон тега version-3.53.4). Скомпонуйте sqlite-collate-depth. Фиктивный HTTP на 127.0.0.1:18800. Привяжите его к loopback.

SUCCESS sqlite-collate-depth how=asan-stack-overflow control=50 crash-n=120000 SQLITE-COLLATE-DEPTH-WITNESS

50 COLLATE возвращает 1. 8k и 40k также возвращают 1. 120k падает с rc=134, переполнение стека ASan в sqlite3WalkExprNN. Проверка версии — SELECT sqlite_version() / SELECT sqlite_source_id().

Исправление

Вызывать sqlite3ExprCheckHeight для узла COLLATE после присоединения pLeft, как это уже делает sqlite3PExpr. Пересчитать nHeight от дочернего узла. Постфиксный оператор — это всё ещё дерево выражения.

Trunk 252c0b7bf5 (2026-10-04) идёт после этого GA.

Ссылки

  • https://sqlite.org/src тег version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • https://github.com/sqlite/sqlite (зеркало Fossil) дерево https://github.com/sqlite/sqlite/tree/version-3.53.4
  • Официальный zip https://www.sqlite.org/2026/sqlite-src-3530400.zip
  • https://sqlite.org/security.html
  • src/parse.y действие COLLATE
  • src/expr.c sqlite3ExprAddCollateToken, sqlite3ExprAlloc (nHeight = 1), sqlite3PExpr / sqlite3ExprCheckHeight
  • src/walker.c sqlite3WalkExprNN
  • src/sqliteLimit.h SQLITE_MAX_EXPR_DEPTH по умолчанию 1000
  • CWE-674 Неконтролируемая рекурсия
  • CWE-770 Выделение ресурсов без ограничений или троттлинга
Скачать инструмент