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-fj-using-auth — SQLite 3.53.4 - Élevé - Local - Résidu de privilège - FULL JOIN USING ignore sqlite3AuthRead | Kitploit
Outils/GitHubGitHub/abraxas/sqlite-fj-using-auth
Authentification et AutorisationEscalade de PrivilègesAnalyse StatiqueAnalyse des VulnérabilitésAnalyse de CodeExploitationArticles et RechercheSécurité des Bases de Données
GitHubabraxas/sqlite-fj-using-auth

sqlite-fj-using-auth

SQLite 3.53.4 - Élevé - Local - Résidu de privilège - FULL JOIN USING ignore sqlite3AuthRead

23il y a 8 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 →
Voir le dépôt
Partager

Abraxas Labs - sqlite-fj-using-auth

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-fj-using-auth

Write-up : https://abraxaslabs.tech/research/sqlite-fj-using-auth

sqlite-fj-using-auth

Classe : Résidu de privilège Portée : Locale

SQLite 3.53.4 (b09c88c / SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

lookupName() réécrit une colonne FULL JOIN USING en coalesce(...) (TK_FUNCTION). sqlite3AuthRead ne s'exécute que pour TK_COLUMN / TK_TRIGGER, donc les colonnes USING ne reçoivent jamais de callback SQLITE_READ. Un embedder qui a installé sqlite3_set_authorizer et qui DENY/IGNORE READ sur t2.x renvoie tout de même cette colonne via SELECT x FROM t1 FULL JOIN t2 USING(x).

L'authorizer est désactivé à l'ouverture par défaut. Résidu de cette API C. Pas de RCE. FULL JOIN ON et LEFT JOIN USING restent refusés / sans fuite. Un coalesce(t2.x) explicite est toujours autorisé.

IDpas encore de CVE
ClasseRésidu de privilège (contournement de l'authorizer au niveau colonne)
PortéeLocale (embedder sqlite3_set_authorizer ; SQL de l'attaquant)
CWECWE-863, CWE-284
CVSSÉlevé : 7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
ProduitSQLite (miroir GitHub sqlite/sqlite)
Affecté3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69). Le correctif authorizer FULL JOIN USING réservé à la 3.54 (2cb2287768) n'est pas présent sur cette GA.
Authembedder ayant installé sqlite3_set_authorizer ; le callback par défaut est NULL
LicenceGNU Affero GPL v3.0
Lab127.0.0.1:18840 uniquement. Chaîne témoin. Pas de RCE.

Ce qu'un attaquant peut faire

Face à un embedder qui a installé sqlite3_set_authorizer comme ACL par colonne, préparer SELECT x FROM t1 FULL JOIN t2 USING(x) (ou NATURAL FULL JOIN). Un simple SELECT x FROM t2 est refusé (SQLITE_AUTH 23). La forme FULL JOIN USING renvoie la colonne dont le READ est refusé. Aucun callback READ t2.x ne se déclenche.

L'authorizer est désactivé sauf si l'embedder en installe un. Le sqlite3_open par défaut n'est pas concerné par ce résidu. Pas de RCE.

Comment je l'ai trouvé

Vingt recherches dans le code source de la 3.53.4 après PHP. La liste d'exclusion mentionnait déjà le commit de vérification authorizer FULL JOIN USING de la 3.54. Il manque toujours sur la dernière GA. pExpr->op vaut TK_FUNCTION à lookupname_end, donc la barrière AuthRead ne s'exécute jamais. WRC_Prune empêche également le walker de descendre dans les arguments de coalesce.

lookupname_end:
  if( cnt==1 ){
#ifndef SQLITE_OMIT_AUTHORIZATION
    if( pParse->db->xAuth
     && (pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER)
    ){
      sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
    }
#endif

Les faux pas déjà consignés : considérer l'authorizer comme activé par défaut ; s'attendre à ce que LEFT JOIN USING ou FULL JOIN ON provoquent une fuite ; s'attendre à ce que coalesce(t2.x) explicite contourne AuthRead ; épingler la version 3.54.0 alors qu'elle était encore à l'état de brouillon.

Lab

cd lab
./run.sh

Compile l'amalgamation officielle sqlite-src-3530400. Le harnais est lab/auth.c. Boucle locale 127.0.0.1:18840. Authorizer DENY READ t2.x. SELECT x FROM t2 refusé. SELECT x FROM t1 FULL JOIN t2 USING(x) renvoie le témoin, 0 READ t2.x. FULL JOIN ON refusé. LEFT JOIN USING sans fuite. La base de référence IGNORE est NULL ; IGNORE FULL JOIN USING fuit toujours.

SUCCESS sqlite-fj-using-auth how=full-join-using-skip-authread baseline=denied fj-using=witness fj-on=denied left-using=no-leak SQLITE-FJ-USING-AUTH-WITNESS

Le correctif

Boucler sqlite3AuthRead sur chaque enfant pFJMatch après la réécriture de coalesce, comme le fait le trunk 2cb2287768 / Git 5694c3bb pour 3.54. Autoriser uniquement a[0] (bbd69ce274) ne suffit pas. LEFT JOIN USING et FULL JOIN ON autorisent déjà ; ils ne constituent pas ce reliquat.

Références

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/resolve.c réécriture de coalesce de lookupName et porte AuthRead
  • src/auth.c sqlite3AuthRead / sqlite3AuthReadCol
  • Forum 2026-07-24T02:52:08Z / 2026-05-31T02:00:37Z
Télécharger l’outil