Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
sqlite-fj-using-auth — SQLite 3.53.4 - Alta - Local - Privilégio remanescente - FULL JOIN USING ignora sqlite3AuthRead | Kitploit
Ferramentas/GitHubGitHub/abraxas/sqlite-fj-using-auth
Autenticação e AutorizaçãoEscalada de PrivilégiosAnálise EstáticaAnálise de VulnerabilidadesAnálise de CódigoExploraçãoPapers e PesquisaSegurança de Banco de Dados
GitHubabraxas/sqlite-fj-using-auth

sqlite-fj-using-auth

SQLite 3.53.4 - Alta - Local - Privilégio remanescente - FULL JOIN USING ignora sqlite3AuthRead

6há 6 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório

Abraxas Labs - sqlite-fj-using-auth

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

sqlite-fj-using-auth

Classe: Privilégio remanescente Alcance: Local

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

lookupName() reescreve uma coluna de FULL JOIN USING para coalesce(...) (TK_FUNCTION). sqlite3AuthRead é executado apenas para TK_COLUMN / TK_TRIGGER, então colunas USING nunca recebem um callback SQLITE_READ. Um embedder que instalou sqlite3_set_authorizer e DENY/IGNORE READ em t2.x ainda retorna essa coluna através de SELECT x FROM t1 FULL JOIN t2 USING(x).

O authorizer está desativado na abertura padrão. Resquício daquela API C. Não é RCE. FULL JOIN ON e LEFT JOIN USING permanecem negados / sem vazamento. coalesce(t2.x) explícito ainda autoriza.

IDainda sem CVE
ClassePrivilégio remanescente (salto do authorizer em nível de coluna)
AlcanceLocal (embedder sqlite3_set_authorizer; SQL do 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
ProdutoSQLite (espelho no GitHub sqlite/sqlite)
Afetado3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69). A correção do authorizer para FULL JOIN USING exclusiva da 3.54 (2cb2287768) não está nesta GA.
Authembedder instalou sqlite3_set_authorizer; o callback padrão é NULL
LicençaGNU Affero GPL v3.0
LabApenas 127.0.0.1:18840. String testemunha. Não é RCE.

O que um atacante pode fazer

Contra um embedder que instalou sqlite3_set_authorizer como ACL de coluna, prepare SELECT x FROM t1 FULL JOIN t2 USING(x) (ou NATURAL FULL JOIN). O SELECT x FROM t2 puro é negado (SQLITE_AUTH 23). A forma FULL JOIN USING retorna a coluna com READ negado. Zero callbacks READ t2.x são disparados.

O authorizer está desativado a menos que o embedder instale um. O sqlite3_open padrão não é este resquício. Não é RCE.

Como eu encontrei

Vinte buscas no código-fonte da 3.53.4 depois do PHP. A lista de exclusão já nomeava a verificação do authorizer para FULL JOIN USING da 3.54. Ela ainda está ausente na GA mais recente. pExpr->op é TK_FUNCTION em lookupname_end, então o gate do AuthRead nunca é executado. WRC_Prune também impede que o walker desça nos argumentos do 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

Caminhos errados já registrados: tratar o authorizer como ativado por padrão; esperar que LEFT JOIN USING ou FULL JOIN ON vazassem; esperar que coalesce(t2.x) explícito pulasse o AuthRead; fixar na 3.54.0 enquanto ainda era rascunho.

Lab

cd lab
./run.sh

Compila a amalgamação oficial sqlite-src-3530400. O harness é lab/auth.c. Loopback 127.0.0.1:18840. Authorizer DENY READ t2.x. SELECT x FROM t2 negado. SELECT x FROM t1 FULL JOIN t2 USING(x) retorna a testemunha, 0 READ t2.x. FULL JOIN ON negado. LEFT JOIN USING sem vazamento. A linha de base IGNORE é NULL; IGNORE FULL JOIN USING ainda vaza.

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

A correção

Faça um loop de sqlite3AuthRead sobre cada filho de pFJMatch após a reescrita do coalesce, da forma como o trunk 2cb2287768 / Git 5694c3bb faz para a 3.54. Autorizar apenas a[0] (bbd69ce274) não é suficiente. LEFT JOIN USING e FULL JOIN ON já autorizam; eles não são este resquício.

Referências

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/resolve.c reescrita do coalesce em lookupName e gate do AuthRead
  • src/auth.c sqlite3AuthRead / sqlite3AuthReadCol
  • Fórum 2026-07-24T02:52:08Z / 2026-05-31T02:00:37Z
Baixar ferramenta