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-collate-depth — SQLite 3.53.4 - Alto - Locale - Crash - La catena COLLATE salta SQLITE_LIMIT_EXPR_DEPTH | Kitploit
Strumenti/GitHubGitHub/abraxas/sqlite-collate-depth
Analisi StaticaAnalisi delle VulnerabilitàExploitFuzzingSicurezza dei Database
GitHubabraxas/sqlite-collate-depth

sqlite-collate-depth

SQLite 3.53.4 - Alto - Locale - Crash - La catena COLLATE salta SQLITE_LIMIT_EXPR_DEPTH

Vedi Repository
187 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-collate-depth

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

Write-up: https://abraxaslabs.tech/research/sqlite-collate-depth

sqlite-collate-depth

Classe: Crash Portata: Locale

SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

L'azione grammaticale COLLATE non chiama mai sqlite3ExprCheckHeight. sqlite3ExprAddCollateToken alloca un nodo TK_COLLATE con nHeight ancora a 1, poi aggancia l'espressione precedente a pLeft. Gli operatori ordinari passano per sqlite3PExpr e rispettano il limite documentato SQLITE_LIMIT_EXPR_DEPTH (predefinito 1000). Questo operatore no.

Il walker ricorre comunque su ogni pLeft. EP_Skip serve per l'affinity, non per sqlite3WalkExprNN. Una catena di 50 nodi restituisce 1. Lo stesso fanno 8k e 40k, oltre il limite di profondità. 120k causano uno stack-overflow ASan in sqlite3WalkExprNN (rc=134). Non è RCE.

L'albero canonico è https://sqlite.org/src. GitHub sqlite/sqlite è un mirror Fossil. Zip ufficiale sqlite-src-3530400. Libreria di pubblico dominio. Questo pacchetto è AGPLv3.

IDnessuna CVE al momento
ClasseCrash (stack-overflow ASan in sqlite3WalkExprNN; RCE non dimostrata)
PortataLocale (SQL non attendibile o una VIEW impiantata)
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
ProdottoSQLite 3.53.4
Affetto3.53.4 (b09c88c); residuo del successivo controllo di altezza COLLATE nel trunk
AuthSQL non attendibile o VIEW; load_extension resta disattivato per impostazione predefinita
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1:18800. Amalgamation ASan. Crash witness.

Cosa può fare un attaccante

Fornisci una lunga catena postfix COLLATE BINARY come SQL, oppure impiantala in una VIEW dentro un .db non attendibile. Il processo host percorre la catena e muore sullo stack C. Il limite documentato di profondità delle espressioni non viene mai applicato a questo operatore.

SELECT 1 COLLATE BINARY COLLATE BINARY ... è sufficiente. Stessa forma in CREATE VIEW v AS SELECT 1 COLLATE BINARY ... poi SELECT * FROM v su una nuova connessione. Il valore predefinito SQLITE_LIMIT_SQL_LENGTH (1e9) contiene la catena da ~1,8 MB che ha causato l'overflow di uno stack da 8 MB in questo lab.

Si tratta di un crash del processo embedder. Non è controllo dell'instruction pointer. load_extension resta disattivato.

Come l'ho trovato

Venti ricerche nel sorgente del tag SQLite version-3.53.4 dopo OpenLiteSpeed. Ultima GA, non la bozza 3.54.0. sqlite.org/security.html tratta SQL non attendibile e .db non attendibili come casi di prima classe. load_extension è disattivato per impostazione predefinita.

parse.y per COLLATE è di tre righe:

expr(A) ::= expr(A) COLLATE ids(C). {
  A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
}

sqlite3ExprAddCollateToken imposta pNew->pLeft = pExpr e EP_Collate|EP_Skip. sqlite3ExprAlloc lasciava nHeight = 1. Nessun sqlite3ExprCheckHeight. sqlite3PExpr fa entrambe le cose per ogni altro operatore binario.

Vicoli ciechi: considerare 8k COLLATE come il crash (restituiva 1); considerare 40k come il crash (restituiva anch'esso 1, ben oltre SQLITE_LIMIT_EXPR_DEPTH 1000); servivano 120k prima che ASan morisse in sqlite3WalkExprNN.

Questo è G1 di quattordici residui sul pin. I fratelli sono altri post.

Lab

cd lab
./run.sh

Amalgamazione ASan da sqlite-src-3530400 ufficiale (clone di fallback del tag version-3.53.4). Componi sqlite-collate-depth. HTTP fittizio su 127.0.0.1:18800. Associalo al loopback.

SUCCESS sqlite-collate-depth how=asan-stack-overflow control=50 crash-n=120000 SQLITE-COLLATE-DEPTH-WITNESS

50 COLLATE restituisce 1. Anche 8k e 40k restituiscono 1. 120k termina con rc=134, stack-overflow ASan in sqlite3WalkExprNN. Il controllo del pin è SELECT sqlite_version() / SELECT sqlite_source_id().

La correzione

Chiamare sqlite3ExprCheckHeight sul nodo COLLATE dopo aver collegato pLeft, come fa già sqlite3PExpr. Ricalcolare nHeight dal figlio. Un operatore postfix è comunque un albero di espressioni.

Trunk 252c0b7bf5 (2026-10-04) è successivo a questa GA.

Riferimenti

  • https://sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • https://github.com/sqlite/sqlite (mirror Fossil) tree https://github.com/sqlite/sqlite/tree/version-3.53.4
  • Zip ufficiale https://www.sqlite.org/2026/sqlite-src-3530400.zip
  • https://sqlite.org/security.html
  • src/parse.y azione COLLATE
  • src/expr.c sqlite3ExprAddCollateToken, sqlite3ExprAlloc (nHeight = 1), sqlite3PExpr / sqlite3ExprCheckHeight
  • src/walker.c sqlite3WalkExprNN
  • src/sqliteLimit.h SQLITE_MAX_EXPR_DEPTH predefinito 1000
  • CWE-674 Uncontrolled Recursion
  • CWE-770 Allocation of Resources Without Limits or Throttling
Scarica lo strumento