Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
sqlite-wal-pagesize — SQLite 3.53.4 - Alto - Locale - Divulgazione di informazioni - Disallineamento della dimensione di pagina WAL/DB e coda di pagina non inizializzata | Kitploit
Strumenti/GitHubGitHub/abraxas/sqlite-wal-pagesize
Memory ForensicsAnalisi delle VulnerabilitàExploitRaccolta InformazioniPaper e RicercaSicurezza dei DatabaseLab e Pratica
GitHubabraxas/sqlite-wal-pagesize

sqlite-wal-pagesize

SQLite 3.53.4 - Alto - Locale - Divulgazione di informazioni - Disallineamento della dimensione di pagina WAL/DB e coda di pagina non inizializzata

Vedi Repository
86 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Abraxas Labs - sqlite-wal-pagesize

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

sqlite-wal-pagesize

Classe: Info leak Reach: Locale

SQLite 3.53.4 (b09c88c) legge ancora un frame WAL in modo incompleto in una pagina pager completa senza memset della coda. walIndexRecover accetta qualsiasi dimensione di pagina WAL potenza di due in [512, SQLITE_MAX_PAGE_SIZE] e non la confronta mai con la dimensione di pagina del database. Gli slot pcache riciclati restituiscono quindi byte heap/pagina precedenti tramite SQL ordinario.

Lab: .db in modalità WAL con pagine da 4096, header -wal adiacente con dimensione pagina 512, SELECT b FROM t ha restituito 2000 byte. La coda oltre il frame da 512 byte era SQLITE-WAL-PAGESIZE-WITNESS. Non è RCE.

IDnessuna CVE al momento
ClasseInfo leak (coda pager non inizializzata tramite SQL)
ReachLocale (.db non attendibile più -wal adiacente)
CWECWE-908, CWE-200
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
ProdottoSQLite (Hwaci)
Affected3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69); SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
Authnessuna (la vittima apre i file dell'attaccante)
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1:18830

Cosa può fare un attaccante

Distribuire un .db in modalità WAL più un -wal adiacente la cui dimensione di pagina nell'header è una potenza di due valida più piccola di quella del database. Il recovery lo accetta. sqlite3WalReadFrame copia solo la dimensione del frame WAL in un buffer pager dimensionato in base al .db. Una cella foglia di tabella che dichiara un payload più grande di quel frame viene soddisfatta dalla coda pcache riciclata. SELECT / substr() / hex() su quel blob restituisce byte pager/heap residui da pagine precedenti nello stesso processo.

Il mismatch inverso (WAL più grande del pager) è SQLITE_CORRUPT al checkpoint. Questo residuo riguarda solo il percorso di lettura con WAL più piccolo. Non è RCE.

Come l'ho trovato

Venti ricerche nel sorgente di 3.53.4 dopo la matrice dei residui del trunk successivo. Winter l'ha segnalato sul forum come 2026-08-17T15:54:41Z. Il trunk f9b4ee3695 / branch-3.53 4fde87b2a0 (2026-08-16) è successivo a questa GA (2026-07-24). sqlite3WalReadFrame su questo pin è ancora (nOut>sz ? sz : nOut) senza memset della coda.

Falsa pista: una cella foglia iniziale era malformata e SELECT restituiva SQLITE_CORRUPT rc=11. La cella che funziona dichiara 2000 byte di payload locale attraverso un frame da 512 byte su una pagina pager da 4096 byte.

Lab

cd lab
./run.sh

Compila SQLite 3.53.4 dallo zip sorgente canonico. Compose sqlite-wal-pagesize. Pubblicato su 127.0.0.1:18830. Precarica la pcache con 48 righe witness da 4000 byte, poi SELECT b FROM t sulla foglia short-read.

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

La correzione

Confrontare la dimensione di pagina dell'header WAL con la dimensione di pagina del database durante il recovery. Quando non coincidono, rifiutare il WAL o inizializzare completamente la pagina pager:

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

Quel hunk è sul trunk dopo questa GA. Non è in 3.53.4.

Riferimenti

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/wal.c sqlite3WalReadFrame, walIndexRecover
  • src/pager.c readDbPage
  • Forum 2026-08-17T15:54:41Z (Winter)
Scarica lo strumento