Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
sqlite-fj-using-auth — SQLite 3.53.4 - Alta - Local - Privilegio residual - FULL JOIN USING omite sqlite3AuthRead | Kitploit
Herramientas/GitHubGitHub/abraxas/sqlite-fj-using-auth
Autenticación y AutorizaciónEscalada de PrivilegiosAnálisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoExplotaciónPapers e InvestigaciónSeguridad de Bases de Datos
GitHubabraxas/sqlite-fj-using-auth

sqlite-fj-using-auth

SQLite 3.53.4 - Alta - Local - Privilegio residual - FULL JOIN USING omite sqlite3AuthRead

6hace 6 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
Ver Repositorio

Abraxas Labs - sqlite-fj-using-auth

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

sqlite-fj-using-auth

Clase: Privilegio residual Alcance: Local

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

lookupName() reescribe una columna de FULL JOIN USING a coalesce(...) (TK_FUNCTION). sqlite3AuthRead solo se ejecuta para TK_COLUMN / TK_TRIGGER, por lo que las columnas USING nunca reciben una callback SQLITE_READ. Un embedder que instaló sqlite3_set_authorizer y aplica DENY/IGNORE a READ sobre t2.x sigue devolviendo esa columna mediante SELECT x FROM t1 FULL JOIN t2 USING(x).

El authorizer está desactivado en la apertura por defecto. Residuo de esa API C. No es RCE. FULL JOIN ON y LEFT JOIN USING permanecen denegados / sin fuga. coalesce(t2.x) explícito sigue autorizando.

IDsin CVE todavía
ClasePrivilegio residual (omisión del authorizer a nivel de columna)
AlcanceLocal (embedder sqlite3_set_authorizer; SQL del atacante)
CWECWE-863, CWE-284
CVSSAlto: 7.5 CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
ProductoSQLite (espejo en GitHub sqlite/sqlite)
Afectado3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69). La corrección del authorizer para FULL JOIN USING exclusiva de 3.54 (2cb2287768) no está en esta GA.
Authel embedder instaló sqlite3_set_authorizer; la callback por defecto es NULL
LicenciaGNU Affero GPL v3.0
Labsolo 127.0.0.1:18840. Cadena testigo. No es RCE.

Qué puede hacer un atacante

Contra un embedder que instaló sqlite3_set_authorizer como ACL de columnas, preparar SELECT x FROM t1 FULL JOIN t2 USING(x) (o NATURAL FULL JOIN). SELECT x FROM t2 sin más es denegado (SQLITE_AUTH 23). La forma FULL JOIN USING devuelve la columna con READ denegado. No se dispara ninguna callback READ t2.x.

El authorizer está desactivado a menos que el embedder instale uno. El sqlite3_open por defecto no es este residuo. No es RCE.

Cómo lo encontré

Veinte búsquedas en el código fuente de 3.53.4 después de PHP. La lista de descartes ya nombraba el check-in del authorizer de FULL JOIN USING de 3.54. Sigue faltando en la última GA. pExpr->op es TK_FUNCTION en lookupname_end, por lo que la compuerta AuthRead nunca se ejecuta. WRC_Prune también impide que el walker descienda a los argumentos 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

Caminos equivocados ya registrados: tratar el authorizer como activado por defecto; esperar que LEFT JOIN USING o FULL JOIN ON filtren; esperar que coalesce(t2.x) explícito omita AuthRead; fijar 3.54.0 mientras aún era borrador.

Lab

cd lab
./run.sh

Compila la amalgama oficial sqlite-src-3530400. El harness es lab/auth.c. Loopback 127.0.0.1:18840. Authorizer DENY READ t2.x. SELECT x FROM t2 denegado. SELECT x FROM t1 FULL JOIN t2 USING(x) devuelve el testigo, 0 READ t2.x. FULL JOIN ON denegado. LEFT JOIN USING sin fuga. La línea base con IGNORE es NULL; IGNORE FULL JOIN USING sigue filtrando.

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

La corrección

Recorrer con sqlite3AuthRead cada hijo de pFJMatch tras la reescritura a coalesce, tal como lo hace trunk 2cb2287768 / Git 5694c3bb para 3.54. Autorizar solo a[0] (bbd69ce274) no es suficiente. LEFT JOIN USING y FULL JOIN ON ya autorizan; no son este residuo.

Referencias

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/resolve.c reescritura a coalesce de lookupName y compuerta AuthRead
  • src/auth.c sqlite3AuthRead / sqlite3AuthReadCol
  • Foro 2026-07-24T02:52:08Z / 2026-05-31T02:00:37Z
Descargar herramienta