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

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

Популярное

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

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

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

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

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

Abraxas Labs - sqlite-collate-depth

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

sqlite-collate-depth

Класс: Crash Доступ: Local

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 не продемонстрирован)
ДоступLocal (недоверенный 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). Compose 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 Uncontrolled Recursion
  • CWE-770 Allocation of Resources Without Limits or Throttling
Скачать инструмент