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

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

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

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

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

Категории

Все категории
Loading categories
sqlite-wal-pagesize — SQLite 3.53.4 — высокий уровень — локальная — утечка информации — несоответствие размера страницы WAL/DB, неинициализированный хвост страницы | Kitploit
Инструменты/GitHubGitHub/abraxas/sqlite-wal-pagesize
Криминалистика памятиАнализ уязвимостейЭксплуатацияСбор информацииСтатьи и ИсследованияБезопасность Баз ДанныхЛаборатории и Практика
GitHubabraxas/sqlite-wal-pagesize

sqlite-wal-pagesize

SQLite 3.53.4 — высокий уровень — локальная — утечка информации — несоответствие размера страницы WAL/DB, неинициализированный хвост страницы

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

Популярное

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

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

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

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

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

Abraxas Labs - sqlite-wal-pagesize

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

Разбор: https://abraxaslabs.tech/research/sqlite-wal-pagesize

sqlite-wal-pagesize

Класс: Утечка информации Охват: Локальный

SQLite 3.53.4 (b09c88c) по-прежнему выполняет неполное чтение кадра WAL в полноразмерную страницу pager без обнуления хвоста через memset. walIndexRecover принимает любой размер страницы WAL, являющийся степенью двойки, в диапазоне [512, SQLITE_MAX_PAGE_SIZE], и никогда не сравнивает его с размером страницы базы данных. Переиспользуемые слоты pcache затем возвращают прежние байты кучи/страниц через обычный SQL.

Лабораторная среда: .db в режиме WAL со страницами 4096, соседний -wal с размером страницы в заголовке 512, SELECT b FROM t вернул 2000 байт. Хвост за пределами 512-байтового кадра содержал SQLITE-WAL-PAGESIZE-WITNESS. Это не RCE.

IDCVE пока нет
КлассУтечка информации (неинициализированный хвост pager через SQL)
ОхватЛокальный (недоверенный .db плюс соседний -wal)
CWECWE-908, CWE-200
CVSSВысокий: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
ПродуктSQLite (Hwaci)
Затронуто3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69); SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
Аутентификацияне требуется (жертва открывает файлы атакующего)
ЛицензияGNU Affero GPL v3.0
Лабораториятолько 127.0.0.1:18830

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

Поставить .db в режиме WAL вместе с соседним -wal, размер страницы в заголовке которого — меньшая допустимая степень двойки, чем у базы данных. Восстановление принимает его. sqlite3WalReadFrame копирует только размер кадра WAL в буфер pager, размер которого задан по .db. Ячейка табличного листа, заявляющая полезную нагрузку больше этого кадра, заполняется из переиспользованного хвоста pcache. SELECT / substr() / hex() по этому blob возвращают оставшиеся байты pager/кучи от предыдущих страниц в том же процессе.

Обратное несоответствие (WAL больше pager) даёт SQLITE_CORRUPT при контрольной точке. Этот остаток относится только к пути чтения при меньшем WAL. Это не RCE.

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

Двадцать поисков по исходникам 3.53.4 после матрицы остатков в более позднем транке. Winter сообщил об этом на форуме как 2026-08-17T15:54:41Z. Транк f9b4ee3695 / ветка-3.53 4fde87b2a0 (2026-08-16) — позже этого GA (2026-07-24). sqlite3WalReadFrame на этой фиксации по-прежнему (nOut>sz ? sz : nOut) без memset хвоста.

Неверный путь: ранняя ячейка листа была некорректной, и SELECT вернул SQLITE_CORRUPT rc=11. Работающая ячейка заявляет 2000 байт локальной полезной нагрузки в пределах 512-байтового кадра на странице pager размером 4096 байт.

Лаборатория

cd lab
./run.sh

Собирает SQLite 3.53.4 из канонического zip-архива исходников. Compose sqlite-wal-pagesize. Опубликован 127.0.0.1:18830. Заполняет pcache 48 строками-свидетелями по 4000 байт, затем SELECT b FROM t по листу с коротким чтением.

SUCCESS sqlite-wal-pagesize how=wal-shortread-pcache-tail len=2000 rootpage=2 SQLITE-WAL-PAGESIZE-WITNESS

Исправление

Сравнивайте размер страницы заголовка WAL с размером страницы базы данных во время восстановления. Если они не совпадают, отклоните WAL или полностью инициализируйте страницу pager:

if( nOut>sz ){
  memset(pOut+sz, 0, nOut-sz);
  nOut = sz;
}

Этот фрагмент находится в trunk после данного GA. Его нет в 3.53.4.

Ссылки

  • sqlite.org/src тег version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/wal.c sqlite3WalReadFrame, walIndexRecover
  • src/pager.c readDbPage
  • Форум 2026-08-17T15:54:41Z (Winter)
Скачать инструмент