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
17vor 6 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

Write-up: https://abraxaslabs.tech/research/sqlite-values-union

sqlite-values-union

Klasse: Crash Reichweite: Lokal

SQLite 3.53.4 (b09c88c) - Hwaci

Das Standard-VALUES verwendet eine Co-Routine. WITH (oder ein Schema-Reload oder eine nicht-konstante Zeile) zwingt sqlite3MultiValues auf UNION ALL. Die Länge des 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 unproblematisch. WITH plus 1000 Zeilen schlägt sauber fehl (Expression tree is too large). WITH plus 300000 Zeilen führt zu einem ASan-Stack-Overflow in sqlite3ExprDeleteNN (rc=134). Kein RCE.

IDnoch keine CVE
KlasseCrash (ASan-Stack-Overflow bei ExprDelete; kein nachgewiesener 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 VALUES-Compound-Begrenzung im Trunk.
AuthAngreifer-SQL oder ein eingeschleustes Schema, das den UNION-ALL-Fallback auslöst
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1:18820. ASan-Amalgamation. Crash-Nachweis.

Was ein Angreifer tun kann

Nicht vertrauenswürdiges SQL einspeisen, das ein Host vorbereitet. Einer riesigen VALUES-Liste WITH voranstellen, damit der Co-Routine-Pfad deaktiviert ist. Das Parsen sollte mit einem Ausdrucks-Tiefenfehler fehlschlagen. Die Bereinigung dieses Baums rekursiert in sqlite3ExprDeleteNN, bis der Prozess stirbt.

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

Wie ich es gefunden habe

Zwanzig Quellcode-Durchsuchungen von github.com/sqlite/sqlite Tag version-3.53.4. Die Skip-Liste hatte bereits CVE-2026-11824, Session-NPD, concat_ws, LOOKASIDE, JSON-UAF und WAL-Reset abgeschlossen. Das Standard-load_extension ist deaktiviert. Das 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.

Fehlversuche: 1000 Zeilen mit WITH schlagen sauber an der dokumentierten Tiefenobergrenze fehl und stürzen nicht ab; benötigt wurden 300000 Zeilen, 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 Quell-Zip 3.53.4, ASan sqlite3. Compose sqlite-values-union. Veröffentlicht 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

Die Behebung

SQLITE_LIMIT_COMPOUND_SELECT wird auf VALUES auf dieselbe Weise angewendet, wie andere Compounds begrenzt werden. Die UNION-ALL-Kette beim Löschen iterativ durchlaufen oder EXPR_DEPTH begrenzen, bevor der Baum aufgebaut wird, damit die Bereinigung nicht vom C-Stack rekursiv absteigt. Ein späterer Trunk (Bug 2026-10-04T05:34:47Z) liegt nach dieser 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 Überspringen von Compound-SELECT, wenn SF_Values gesetzt ist
  • src/insert.c:681-704 UNION-ALL-Fallback von sqlite3MultiValues
  • src/expr.c:1406-1430 rekursives sqlite3ExprDeleteNN
  • sqlite.org/cves.html · sqlite.org/security.html
Tool herunterladen