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-values-union — SQLite 3.53.4 - Alto - Locale - Crash - VALUES UNION ALL fallback cleanup stack overflow | Kitploit
Strumenti/GitHubGitHub/abraxas/sqlite-values-union
Analisi delle VulnerabilitàExploitFuzzingAnalisi di BinariPaper e RicercaSicurezza dei DatabaseLab e Pratica
GitHubabraxas/sqlite-values-union

sqlite-values-union

SQLite 3.53.4 - Alto - Locale - Crash - VALUES UNION ALL fallback cleanup stack overflow

Vedi Repository
5 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-values-union

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

sqlite-values-union

Classe: Crash Reach: Locale

SQLite 3.53.4 (b09c88c) - Hwaci

Il VALUES predefinito usa una co-routine. WITH (o il ricaricamento dello schema, o una riga non costante) forza sqlite3MultiValues su UNION ALL. La lunghezza del compound-SELECT viene saltata quando SF_Values è impostato (parse.y:562-567). Una lista di righe sufficientemente grande viene quindi rifiutata da SQLITE_LIMIT_EXPR_DEPTH, e la ricorsione di sqlite3ExprDeleteNN fa esplodere lo stack C nel percorso di pulizia dell'errore.

Un semplice VALUES di 5000 righe va bene. WITH più 1000 righe genera un errore pulito (Expression tree is too large). WITH più 300000 righe è uno stack-overflow ASan in sqlite3ExprDeleteNN (rc=134). Non è RCE.

IDnessuna CVE al momento
ClasseCrash (stack-overflow ASan su ExprDelete; RCE non dimostrata)
ReachLocale (SQL non attendibile, o VALUES all'interno di VIEW/TRIGGER)
CWECWE-674
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
ProdottoSQLite
Affected3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc). Residuo del successivo limite compound VALUES del trunk.
AuthSQL dell'attaccante, o uno schema impiantato che ricade nel fallback UNION ALL
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1:18820. Amalgamazione ASan. Crash witness.

Cosa può fare un attaccante

Fornire SQL non attendibile che un host preparerà. Anteporre a una grande lista VALUES la clausola WITH in modo che il percorso della co-routine sia disattivato. Il parsing dovrebbe fallire con un errore di profondità dell'espressione. La pulizia di quell'albero ricorre in sqlite3ExprDeleteNN finché il processo non muore.

Lo stesso fallback si attiva quando VALUES risiede in una VIEW o TRIGGER (db->init.busy). L'host è l'embedder: una CLI, un'app che prepara SQL dell'attaccante, un servizio che apre un .db ostile. SQLite non valuta i byte di VALUES come codice. Il crash è la scoperta.

Come l'ho trovato

Venti ricerche nel sorgente di github.com/sqlite/sqlite tag version-3.53.4. La skip list aveva già chiuso CVE-2026-11824, session NPD, concat_ws, LOOKASIDE, JSON UAF, WAL-reset. Il load_extension predefinito è disattivato. Il residuo del parser/VDBE era questo salto di VALUES UNION ALL più un distruttore ricorsivo.

if( (p->selFlags & (SF_MultiValue|SF_Values))==0
 && (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0
 && cnt>mxSelect
){
  sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
}
if( pParse->bHasWith
 || pParse->db->init.busy
 || exprListIsConstant(pParse,pRow)==0
 ...
){
  /* The co-routine method cannot be used. Fall back to UNION ALL. */
  ...
  pSelect->op = TK_ALL;
  pSelect->pPrior = pLeft;
}

clearSelect() percorre pPrior in modo iterativo. sqlite3ExprDeleteNN() ricorre ancora su pRight e su pLeft quando EP_Static è impostato.

Vicoli ciechi: 1000 righe con WITH generano un errore pulito al limite di profondità documentato e non vanno in crash; sono servite 300000 righe perché la profondità del distruttore facesse esplodere lo stack C da 8 MiB. Un semplice VALUES rimane sulla co-routine ed è il controllo negativo.

Lab

cd lab
./run.sh

Zip sorgente canonico 3.53.4, sqlite3 con ASan. Compose sqlite-values-union. Pubblicato su 127.0.0.1:18820. Associalo al loopback.

SUCCESS sqlite-values-union how=with-values-union-all-fallback-exprdelete rows=300000 crash=asan-stack-overflow plain=5000 depth-error=1000 SQLITE-VALUES-UNION-WITNESS

La correzione

Applicare SQLITE_LIMIT_COMPOUND_SELECT a VALUES allo stesso modo in cui vengono limitati gli altri compound. Percorrere la catena UNION ALL in modo iterativo alla cancellazione, oppure limitare EXPR_DEPTH prima che l'albero venga costruito, così che la pulizia non possa ricorrere oltre lo stack C. Il trunk successivo (Bug 2026-10-04T05:34:47Z) è posteriore a questa GA.

Riferimenti

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • src/parse.y:562-567 salto del compound-SELECT quando SF_Values è impostato
  • src/insert.c:681-704 fallback UNION ALL di sqlite3MultiValues
  • src/expr.c:1406-1430 sqlite3ExprDeleteNN ricorsivo
  • sqlite.org/cves.html · sqlite.org/security.html
Scarica lo strumento