Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
sqlite-values-union — SQLite 3.53.4 – Hoch – Lokal – Absturz – VALUES UNION ALL Fallback-Bereinigung Stack-Überlauf | Kitploit
Tools/GitHubGitHub/abraxas/sqlite-values-union
SchwachstellenanalyseExploitationFuzzingBinäranalysePapers & ForschungDatenbanksicherheitLabs & Praxis
GitHubabraxas/sqlite-values-union

sqlite-values-union

SQLite 3.53.4 – Hoch – Lokal – Absturz – VALUES UNION ALL Fallback-Bereinigung Stack-Überlauf

Repository anzeigen
vor 5 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Abraxas Labs - sqlite-values-union

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

sqlite-values-union

Klasse: Crash Reichweite: Lokal

SQLite 3.53.4 (b09c88c) - Hwaci

Standardmäßig verwendet VALUES eine Co-Routine. WITH (oder ein Schema-Reload oder eine nicht-konstante Zeile) zwingt sqlite3MultiValues auf UNION ALL. Die Längenprüfung für Compound-SELECT wird übersprungen, wenn SF_Values gesetzt ist (parse.y:562-567). Eine ausreichend große Zeilenliste wird dann von SQLITE_LIMIT_EXPR_DEPTH abgelehnt, und das rekursive sqlite3ExprDeleteNN sprengt den C-Stack auf dem Fehlerbereinigungspfad.

Einfaches VALUES mit 5000 Zeilen ist in Ordnung. WITH plus 1000 Zeilen führt zu einem sauberen Fehler (Expression tree is too large). WITH plus 300000 Zeilen ist ein ASan-Stack-Overflow in sqlite3ExprDeleteNN (rc=134). Kein RCE.

IDnoch keine CVE
KlasseCrash (ASan-Stack-Overflow bei ExprDelete; kein nachgewiesenes RCE)
ReichweiteLokal (nicht vertrauenswürdiges SQL oder VALUES innerhalb von 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
ProduktSQLite
Betroffen3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc). Überbleibsel der späteren Trunk-VALUES-Compound-Begrenzung.
AuthAngreifer-SQL oder ein platziertes Schema, das den UNION-ALL-Fallback auslöst
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1:18820. ASan-Amalgamation. Crash-Witness.

Was ein Angreifer tun kann

Nicht vertrauenswürdiges SQL einspeisen, das ein Host vorbereitet. Ein riesige VALUES-Liste mit WITH präfixen, damit der Co-Routine-Pfad deaktiviert ist. Das Parsen soll eigentlich mit einem Expression-Depth-Fehler fehlschlagen. Die Bereinigung dieses Baums rekursiert in sqlite3ExprDeleteNN, bis der Prozess stirbt.

Derselbe Fallback greift, wenn VALUES in einer VIEW oder einem TRIGGER lebt (db->init.busy). Der Host ist der Embedder: eine CLI, eine App, die Angreifer-SQL vorbereitet, ein Dienst, der eine feindliche .db öffnet. SQLite evaluiert die VALUES-Bytes nicht als Code. Der Crash ist der Befund.

Wie ich es gefunden habe

Zwanzig Quellcode-Suchen im Tag version-3.53.4 von github.com/sqlite/sqlite. Die Skip-Liste hatte bereits CVE-2026-11824, Session-NPD, concat_ws, LOOKASIDE, JSON-UAF und WAL-Reset geschlossen. Standardmäßig ist load_extension deaktiviert. Ein Parser/VDBE-Überbleibsel war dieser VALUES-UNION-ALL-Skip plus ein rekursiver Destruktor.

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() durchläuft pPrior iterativ. sqlite3ExprDeleteNN() rekursiert weiterhin auf pRight und auf pLeft, wenn EP_Static gesetzt ist.

Irrwege: 1000 Zeilen mit WITH führen am dokumentierten Depth-Cap zu einem sauberen Fehler und stürzen nicht ab; es waren 300000 Zeilen nötig, damit die Destruktor-Tiefe den 8 MiB großen C-Stack sprengt. Einfaches VALUES bleibt auf der Co-Routine und ist die Negativkontrolle.

Lab

cd lab
./run.sh

Kanonisches 3.53.4-Quell-Zip, ASan sqlite3. Compose sqlite-values-union. Veröffentlicht auf 127.0.0.1:18820. Binde es an 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

Der Fix

Wende SQLITE_LIMIT_COMPOUND_SELECT auf VALUES genauso an, wie andere Compounds begrenzt werden. Durchlaufe die UNION-ALL-Kette beim Löschen iterativ, oder begrenze EXPR_DEPTH, bevor der Baum aufgebaut wird, damit die Bereinigung nicht vom C-Stack rekursieren kann. Der spätere Trunk (Bug 2026-10-04T05:34:47Z) liegt nach diesem GA.

Referenzen

  • sqlite.org/src Tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • src/parse.y:562-567 Compound-SELECT-Skip, wenn SF_Values gesetzt ist
  • src/insert.c:681-704 sqlite3MultiValues UNION-ALL-Fallback
  • src/expr.c:1406-1430 rekursives sqlite3ExprDeleteNN
  • sqlite.org/cves.html · sqlite.org/security.html
Tool herunterladen