Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
sqlite-values-union — SQLite 3.53.4 - Élevé - Local - Crash - Débordement de pile lors du nettoyage du fallback de VALUES UNION ALL | Kitploit
Outils/GitHubGitHub/abraxas/sqlite-values-union
Analyse des VulnérabilitésExploitationFuzzingAnalyse de BinairesArticles et RechercheSécurité des Bases de DonnéesLabs et Pratique
GitHubabraxas/sqlite-values-union

sqlite-values-union

SQLite 3.53.4 - Élevé - Local - Crash - Débordement de pile lors du nettoyage du fallback de VALUES UNION ALL

Voir le dépôt
il y a 5 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Abraxas Labs - sqlite-values-union

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

sqlite-values-union

Classe : Crash Portée : Locale

SQLite 3.53.4 (b09c88c) - Hwaci

Le VALUES par défaut utilise une co-routine. WITH (ou un rechargement de schéma, ou une ligne non constante) force sqlite3MultiValues sur UNION ALL. La longueur du SELECT composé est ignorée lorsque SF_Values est défini (parse.y:562-567). Une liste de lignes suffisamment grande est alors rejetée par SQLITE_LIMIT_EXPR_DEPTH, et le récursif sqlite3ExprDeleteNN fait exploser la pile C sur le chemin de nettoyage d'erreur.

Un simple VALUES de 5000 lignes passe. WITH plus 1000 lignes échoue proprement (Expression tree is too large). WITH plus 300000 lignes provoque un stack-overflow ASan dans sqlite3ExprDeleteNN (rc=134). Pas de RCE.

IDpas encore de CVE
ClasseCrash (stack-overflow ASan sur ExprDelete ; RCE non démontré)
PortéeLocale (SQL non fiable, ou VALUES dans une VIEW/TRIGGER)
CWECWE-674
CVSSÉlevé : 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
ProduitSQLite
Affecté3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc). Vestige du plafond VALUES composé du trunk ultérieur.
AuthSQL de l'attaquant, ou un schéma planté qui emprunte le fallback UNION ALL
LicenceGNU Affero GPL v3.0
Lab127.0.0.1:18820 uniquement. Amalgamation ASan. Témoin de crash.

Ce qu'un attaquant peut faire

Fournir du SQL non fiable qu'un hôte va préparer. Préfixer une énorme liste VALUES par WITH pour désactiver le chemin co-routine. L'analyse est censée échouer avec une erreur de profondeur d'expression. Le nettoyage de cet arbre récurse dans sqlite3ExprDeleteNN jusqu'à ce que le processus meure.

Le même fallback se déclenche lorsque VALUES réside dans une VIEW ou un TRIGGER (db->init.busy). L'hôte est l'embedder : un CLI, une application qui prépare du SQL attaquant, un service qui ouvre un .db hostile. SQLite n'évalue pas les octets VALUES comme du code. Le crash est la découverte.

Comment je l'ai trouvé

Vingt chasses dans les sources de github.com/sqlite/sqlite tag version-3.53.4. La skip list avait déjà fermé CVE-2026-11824, session NPD, concat_ws, LOOKASIDE, JSON UAF, WAL-reset. Le load_extension par défaut est désactivé. Le vestige Parser/VDBE était ce skip VALUES UNION ALL plus un destructeur récursif.

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() parcourt pPrior de manière itérative. sqlite3ExprDeleteNN() récurse toujours sur pRight et sur pLeft lorsque EP_Static est défini.

Fausses pistes : 1000 lignes avec WITH échouent proprement au plafond de profondeur documenté et ne crashent pas ; il fallait 300000 lignes pour que la profondeur du destructeur fasse exploser la pile C de 8 MiB. Un simple VALUES reste sur la co-routine et constitue le contrôle négatif.

Lab

cd lab
./run.sh

Zip source canonique 3.53.4, sqlite3 ASan. Compose sqlite-values-union. Publié sur 127.0.0.1:18820. Liez-le à 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

Le correctif

Appliquer SQLITE_LIMIT_COMPOUND_SELECT à VALUES de la même manière que les autres composés sont plafonnés. Parcourir la chaîne UNION ALL de manière itérative à la suppression, ou plafonner EXPR_DEPTH avant que l'arbre ne soit construit afin que le nettoyage ne puisse pas récurser hors de la pile C. Le trunk ultérieur (Bug 2026-10-04T05:34:47Z) est postérieur à cette GA.

Références

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • src/parse.y:562-567 skip du SELECT composé lorsque SF_Values est défini
  • src/insert.c:681-704 fallback UNION ALL de sqlite3MultiValues
  • src/expr.c:1406-1430 récursif sqlite3ExprDeleteNN
  • sqlite.org/cves.html · sqlite.org/security.html
Télécharger l’outil