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

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

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

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

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

Категории

Все категории
Loading categories
sqlite-fj-using-auth — SQLite 3.53.4 — высокий — локальный — остаточная привилегия — FULL JOIN USING пропускает sqlite3AuthRead | Kitploit
Инструменты/GitHubGitHub/abraxas/sqlite-fj-using-auth
Аутентификация и авторизацияПовышение привилегийСтатический анализАнализ уязвимостейАнализ КодаЭксплуатацияСтатьи и ИсследованияБезопасность Баз Данных
GitHubabraxas/sqlite-fj-using-auth

sqlite-fj-using-auth

SQLite 3.53.4 — высокий — локальный — остаточная привилегия — FULL JOIN USING пропускает sqlite3AuthRead

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

Популярное

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

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

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

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

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

Abraxas Labs - sqlite-fj-using-auth

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-fj-using-auth

sqlite-fj-using-auth

Класс: Остаточные привилегии Доступ: Локальный

SQLite 3.53.4 (b09c88c / SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

lookupName() переписывает столбец FULL JOIN USING в coalesce(...) (TK_FUNCTION). sqlite3AuthRead выполняется только для TK_COLUMN / TK_TRIGGER, поэтому столбцы USING никогда не получают обратный вызов SQLITE_READ. Встраиваемое приложение, установившее sqlite3_set_authorizer и DENY/IGNORE READ на t2.x, всё равно возвращает этот столбец через SELECT x FROM t1 FULL JOIN t2 USING(x).

Авторизатор отключён при открытии по умолчанию. Остаток от этого C API. Не RCE. FULL JOIN ON и LEFT JOIN USING остаются запрещёнными / без утечки. Явный coalesce(t2.x) всё ещё авторизуется.

IDCVE пока нет
КлассОстаточные привилегии (пропуск авторизатора на уровне столбца)
ДоступЛокальный (встраиваемое приложение sqlite3_set_authorizer; SQL атакующего)
CWECWE-863, CWE-284
CVSSHigh: 7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
ПродуктSQLite (зеркало на GitHub sqlite/sqlite)
Затронуто3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69). Исправление авторизатора FULL JOIN USING, присутствующее только в 3.54 (2cb2287768), отсутствует в этом GA-релизе.
Аутентификациявстраиваемое приложение установило sqlite3_set_authorizer; обратный вызов по умолчанию — NULL
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:18840. Строка-свидетель. Не RCE.

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

Против встраиваемого приложения, установившего sqlite3_set_authorizer в качестве ACL на уровне столбцов, подготовить SELECT x FROM t1 FULL JOIN t2 USING(x) (или NATURAL FULL JOIN). Простой SELECT x FROM t2 запрещён (SQLITE_AUTH 23). Форма FULL JOIN USING возвращает столбец, доступ к которому на чтение запрещён. Не срабатывает ни одного обратного вызова READ t2.x.

Авторизатор отключён, если встраиваемое приложение его не установило. По умолчанию sqlite3_open — это не данный остаток. Не RCE.

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

Двадцать поисков по исходникам 3.53.4 после PHP. Список пропусков уже называл проверку авторизатора FULL JOIN USING из 3.54. Она всё ещё отсутствует в последнем GA-релизе. pExpr->op равен TK_FUNCTION в lookupname_end, поэтому проверка AuthRead никогда не выполняется. WRC_Prune также не даёт обходчику спуститься в аргументы coalesce.

lookupname_end:
  if( cnt==1 ){
#ifndef SQLITE_OMIT_AUTHORIZATION
    if( pParse->db->xAuth
     && (pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER)
    ){
      sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
    }
#endif

Уже зафиксированные ошибочные пути: считать авторизатор включённым по умолчанию; ожидать утечку от LEFT JOIN USING или FULL JOIN ON; ожидать, что явный coalesce(t2.x) пропустит AuthRead; закрепление на 3.54.0, пока он ещё был черновиком.

Лаборатория

cd lab
./run.sh

Собирает официальный amalgamation sqlite-src-3530400. Тестовый стенд — lab/auth.c. Loopback 127.0.0.1:18840. Авторизатор DENY READ t2.x. SELECT x FROM t2 запрещён. SELECT x FROM t1 FULL JOIN t2 USING(x) возвращает свидетеля, 0 READ t2.x. FULL JOIN ON запрещён. LEFT JOIN USING без утечки. Базовый IGNORE — NULL; IGNORE FULL JOIN USING всё равно даёт утечку.

SUCCESS sqlite-fj-using-auth how=full-join-using-skip-authread baseline=denied fj-using=witness fj-on=denied left-using=no-leak SQLITE-FJ-USING-AUTH-WITNESS

Исправление

Пройти циклом sqlite3AuthRead по каждому дочернему элементу pFJMatch после переписывания в coalesce, как это делает trunk 2cb2287768 / Git 5694c3bb для 3.54. Авторизации только a[0] (bbd69ce274) недостаточно. LEFT JOIN USING и FULL JOIN ON уже авторизуются; они не являются этим остатком.

Ссылки

  • sqlite.org/src тег version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/resolve.c переписывание в coalesce в lookupName и проверка AuthRead
  • src/auth.c sqlite3AuthRead / sqlite3AuthReadCol
  • Форум 2026-07-24T02:52:08Z / 2026-05-31T02:00:37Z
Скачать инструмент