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-collate-depth — SQLite 3.53.4 – Hoch – Lokal – Absturz – COLLATE-Kette überschreitet SQLITE_LIMIT_EXPR_DEPTH | Kitploit
Tools/GitHubGitHub/abraxas/sqlite-collate-depth
Statische AnalyseSchwachstellenanalyseExploitationFuzzingDatenbanksicherheit
GitHubabraxas/sqlite-collate-depth

sqlite-collate-depth

SQLite 3.53.4 – Hoch – Lokal – Absturz – COLLATE-Kette überschreitet SQLITE_LIMIT_EXPR_DEPTH

Repository anzeigen
18vor 7 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-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

Klasse: Crash Reichweite: Lokal

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

Die COLLATE-Grammatikaktion ruft niemals sqlite3ExprCheckHeight auf. sqlite3ExprAddCollateToken allokiert einen TK_COLLATE-Knoten, dessen nHeight noch 1 ist, und hängt dann den vorherigen Ausdruck an pLeft. Gewöhnliche Operatoren laufen durch sqlite3PExpr und erhalten das dokumentierte SQLITE_LIMIT_EXPR_DEPTH (Standard 1000). Dieser Operator nicht.

Der Walker rekursiert dennoch auf jedem pLeft. EP_Skip ist für Affinität gedacht, nicht für sqlite3WalkExprNN. Eine Kette aus 50 Knoten liefert 1. Ebenso 8k und 40k, jenseits des Tiefenlimits. 120k führen zu einem ASan-Stack-Overflow in sqlite3WalkExprNN (rc=134). Kein RCE.

Der kanonische Baum ist https://sqlite.org/src. GitHub sqlite/sqlite ist ein Fossil-Mirror. Offizielles Zip sqlite-src-3530400. Public-Domain-Bibliothek. Dieses Paket ist AGPLv3.

IDnoch keine CVE
KlasseCrash (ASan-Stack-Overflow in sqlite3WalkExprNN; kein RCE nachgewiesen)
ReichweiteLokal (nicht vertrauenswürdiges SQL oder eine eingeschleuste VIEW)
CWECWE-674, CWE-770
CVSSHoch: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
ProduktSQLite 3.53.4
Betroffen3.53.4 (b09c88c); Überbleibsel der späteren COLLATE-Höhenprüfung im Trunk
Authnicht vertrauenswürdiges SQL oder VIEW; Standard-load_extension bleibt deaktiviert
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1:18800. ASan-Amalgamation. Crash-Nachweis.

Was ein Angreifer tun kann

Eine lange postfixe COLLATE BINARY-Kette als SQL einspeisen oder sie in einer VIEW innerhalb einer nicht vertrauenswürdigen .db platzieren. Der Host-Prozess durchläuft die Kette und stirbt am C-Stack. Das dokumentierte Ausdruckstiefenlimit greift bei diesem Operator nie.

SELECT 1 COLLATE BINARY COLLATE BINARY ... genügt. Dieselbe Form in CREATE VIEW v AS SELECT 1 COLLATE BINARY ... und dann SELECT * FROM v auf einer frischen Verbindung. Das Standard-SQLITE_LIMIT_SQL_LENGTH (1e9) hält die ~1,8 MB lange Kette, die in diesem Lab einen 8-MB-Stack zum Überlaufen brachte.

Dies ist ein Absturz des Embedder-Prozesses. Es ist keine Kontrolle über den Instruction Pointer. load_extension bleibt deaktiviert.

Wie ich es gefunden habe

Zwanzig Quellcode-Suchen im SQLite-Tag version-3.53.4 nach OpenLiteSpeed. Neueste GA, nicht der 3.54.0-Entwurf. sqlite.org/security.html behandelt nicht vertrauenswürdiges SQL und nicht vertrauenswürdige .db als erstklassig. Standard-load_extension ist deaktiviert.

parse.y für COLLATE besteht aus drei Zeilen:

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

sqlite3ExprAddCollateToken setzt pNew->pLeft = pExpr und EP_Collate|EP_Skip. sqlite3ExprAlloc ließ nHeight = 1. Kein sqlite3ExprCheckHeight. sqlite3PExpr erledigt beides für jeden anderen binären Operator.

Irrwege: 8k COLLATE als den Absturz zu behandeln (es gab 1 zurück); 40k als den Absturz zu behandeln (es gab ebenfalls 1 zurück, weit über SQLITE_LIMIT_EXPR_DEPTH 1000 hinaus); 120k zu benötigen, bevor ASan in sqlite3WalkExprNN starb.

Dies ist G1 von vierzehn Überbleibseln auf dem Pin. Die Geschwister sind andere Beiträge.

Lab

cd lab
./run.sh

ASan-Amalgamation aus offiziellem sqlite-src-3530400 (Fallback-Klon des Tags version-3.53.4). sqlite-collate-depth zusammenstellen. Dummy-HTTP auf 127.0.0.1:18800. An Loopback binden.

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

50 COLLATE gibt 1 zurück. 8k und 40k geben ebenfalls 1 zurück. 120k stirbt mit rc=134, ASan Stack-Overflow in sqlite3WalkExprNN. Die Pin-Prüfung ist SELECT sqlite_version() / SELECT sqlite_source_id().

Die Korrektur

Rufe sqlite3ExprCheckHeight auf dem COLLATE-Knoten auf, nachdem pLeft angehängt wurde, so wie es sqlite3PExpr bereits tut. Berechne nHeight aus dem Kind neu. Ein Postfix-Operator ist immer noch ein Ausdrucksbaum.

Trunk 252c0b7bf5 (2026-10-04) liegt nach diesem GA.

Referenzen

  • https://sqlite.org/src Tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • https://github.com/sqlite/sqlite (Fossil-Mirror) Tree https://github.com/sqlite/sqlite/tree/version-3.53.4
  • Offizielles Zip https://www.sqlite.org/2026/sqlite-src-3530400.zip
  • https://sqlite.org/security.html
  • src/parse.y COLLATE-Aktion
  • src/expr.c sqlite3ExprAddCollateToken, sqlite3ExprAlloc (nHeight = 1), sqlite3PExpr / sqlite3ExprCheckHeight
  • src/walker.c sqlite3WalkExprNN
  • src/sqliteLimit.h SQLITE_MAX_EXPR_DEPTH Standardwert 1000
  • CWE-674 Unkontrollierte Rekursion
  • CWE-770 Zuweisung von Ressourcen ohne Begrenzung oder Drosselung
Tool herunterladen