Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
sqlite-wal-pagesize — SQLite 3.53.4 - Alta - Local - Vazamento de informação - Incompatibilidade de tamanho de página WAL/DB na cauda de página não inicializada | Kitploit
Ferramentas/GitHubGitHub/abraxas/sqlite-wal-pagesize
Forensia de MemóriaAnálise de VulnerabilidadesExploraçãoColeta de InformaçõesPapers e PesquisaSegurança de Banco de DadosLabs e Prática
GitHubabraxas/sqlite-wal-pagesize

sqlite-wal-pagesize

SQLite 3.53.4 - Alta - Local - Vazamento de informação - Incompatibilidade de tamanho de página WAL/DB na cauda de página não inicializada

Ver Repositório
8há 6 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Abraxas Labs - sqlite-wal-pagesize

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

sqlite-wal-pagesize

Classe: Vazamento de informação Alcance: Local

O SQLite 3.53.4 (b09c88c) ainda faz short-read de um frame WAL para uma página completa do pager sem memset da cauda. O walIndexRecover aceita qualquer tamanho de página WAL potência de dois em [512, SQLITE_MAX_PAGE_SIZE] e nunca o compara com o tamanho de página do banco de dados. Slots de pcache reciclados então retornam bytes anteriores do heap/página através de SQL comum.

Lab: .db em modo WAL com páginas de 4096, cabeçalho do -wal irmão com tamanho de página 512, SELECT b FROM t retornou 2000 bytes. A cauda após o frame de 512 bytes era SQLITE-WAL-PAGESIZE-WITNESS. Não é RCE.

IDainda sem CVE
ClasseVazamento de informação (cauda não inicializada do pager através de SQL)
AlcanceLocal (.db não confiável mais -wal irmão)
CWECWE-908, CWE-200
CVSSAlto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
ProdutoSQLite (Hwaci)
Afetado3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69); SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
Autenticaçãonenhuma (a vítima abre os arquivos do atacante)
LicençaGNU Affero GPL v3.0
Labsomente 127.0.0.1:18830

O que um atacante pode fazer

Entregar um .db em modo WAL mais um -wal irmão cujo tamanho de página no cabeçalho seja uma potência de dois válida menor que a do banco de dados. A recuperação aceita. O sqlite3WalReadFrame copia apenas o tamanho do frame WAL para um buffer do pager dimensionado a partir do .db. Uma célula de folha de tabela que declara um payload maior que esse frame é satisfeita a partir da cauda reciclada do pcache. SELECT / substr() / hex() nesse blob retorna bytes residuais do pager/heap de páginas anteriores no mesmo processo.

A incompatibilidade inversa (WAL maior que o pager) é SQLITE_CORRUPT no checkpoint. Este resíduo é apenas o caminho de leitura com WAL menor. Não é RCE.

Como eu encontrei

Vinte buscas no código-fonte da 3.53.4 após a matriz de resíduos do trunk posterior. Winter reportou no fórum como 2026-08-17T15:54:41Z. O trunk f9b4ee3695 / branch-3.53 4fde87b2a0 (2026-08-16) é posterior a este GA (2026-07-24). O sqlite3WalReadFrame neste pin ainda é (nOut>sz ? sz : nOut) sem memset da cauda.

Caminho errado: uma célula de folha inicial estava malformada e o SELECT retornou SQLITE_CORRUPT rc=11. A célula que funciona declara 2000 bytes de payload local através de um frame de 512 bytes em uma página de pager de 4096 bytes.

Lab

cd lab
./run.sh

Compila o SQLite 3.53.4 a partir do zip canônico do código-fonte. Compose sqlite-wal-pagesize. Publicado em 127.0.0.1:18830. Prepara o pcache com 48x4000 bytes de linhas witness, depois SELECT b FROM t na folha de short-read.

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

A correção

Comparar o tamanho de página do cabeçalho WAL com o tamanho de página do banco de dados durante a recuperação. Quando discordarem, recusar o WAL ou inicializar completamente a página do pager:

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

Esse trecho está no trunk após este GA. Não está na 3.53.4.

Referências

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/wal.c sqlite3WalReadFrame, walIndexRecover
  • src/pager.c readDbPage
  • Fórum 2026-08-17T15:54:41Z (Winter)
Baixar ferramenta