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-values-union — SQLite 3.53.4 - Alta - Local - Crash - VALUES UNION ALL fallback cleanup stack overflow | Kitploit
Ferramentas/GitHubGitHub/abraxas/sqlite-values-union
Análise de VulnerabilidadesExploraçãoFuzzingAnálise de BináriosPapers e PesquisaSegurança de Banco de DadosLabs e Prática
GitHubabraxas/sqlite-values-union

sqlite-values-union

SQLite 3.53.4 - Alta - Local - Crash - VALUES UNION ALL fallback cleanup stack overflow

Ver Repositório
há 5 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

Abraxas Labs - sqlite-values-union

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

sqlite-values-union

Classe: Crash Alcance: Local

SQLite 3.53.4 (b09c88c) - Hwaci

O VALUES padrão usa uma co-rotina. WITH (ou recarga de schema, ou uma linha não constante) força sqlite3MultiValues para UNION ALL. O comprimento do SELECT composto é ignorado quando SF_Values está definido (parse.y:562-567). Uma lista de linhas suficientemente grande é então rejeitada por SQLITE_LIMIT_EXPR_DEPTH, e o recursivo sqlite3ExprDeleteNN estoura a pilha C no caminho de limpeza de erro.

VALUES simples de 5000 linhas está ok. WITH mais 1000 linhas dá erro limpo (Expression tree is too large). WITH mais 300000 linhas é stack-overflow do ASan em sqlite3ExprDeleteNN (rc=134). Não é RCE.

IDainda sem CVE
ClasseCrash (stack-overflow do ASan em ExprDelete; RCE não demonstrado)
AlcanceLocal (SQL não confiável, ou VALUES dentro de VIEW/TRIGGER)
CWECWE-674
CVSSAlto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
ProdutoSQLite
Afetado3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc). Resquício do limite posterior de VALUES composto no trunk.
AuthSQL do atacante, ou um schema plantado que usa o fallback UNION ALL
LicençaGNU Affero GPL v3.0
LabApenas 127.0.0.1:18820. Amalgamação ASan. Testemunha de crash.

O que um atacante pode fazer

Fornecer SQL não confiável que um host irá preparar. Prefixar uma lista VALUES enorme com WITH para que o caminho da co-rotina seja desativado. O parse deveria falhar com um erro de profundidade de expressão. A limpeza dessa árvore recursa em sqlite3ExprDeleteNN até o processo morrer.

O mesmo fallback dispara quando VALUES está em uma VIEW ou TRIGGER (db->init.busy). O host é o embedder: uma CLI, um app que prepara SQL do atacante, um serviço que abre um .db hostil. O SQLite não avalia os bytes de VALUES como código. O crash é o achado.

Como eu encontrei

Vinte buscas no código-fonte de github.com/sqlite/sqlite tag version-3.53.4. A lista de exclusão já fechou CVE-2026-11824, session NPD, concat_ws, LOOKASIDE, JSON UAF, WAL-reset. O load_extension padrão está desligado. O resquício do parser/VDBE era esse skip de VALUES UNION ALL mais um destrutor recursivo.

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() percorre pPrior iterativamente. sqlite3ExprDeleteNN() ainda recursa em pRight e em pLeft quando EP_Static está definido.

Caminhos errados: 1000 linhas com WITH dão erro limpo no limite de profundidade documentado e não causam crash; foram necessárias 300000 linhas para que a profundidade do destrutor estourasse a pilha C de 8 MiB. VALUES simples permanece na co-rotina e é o controle negativo.

Lab

cd lab
./run.sh

Zip canônico do código-fonte 3.53.4, sqlite3 com ASan. Compose sqlite-values-union. Publicado em 127.0.0.1:18820. Vincule-o ao 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

A correção

Aplique SQLITE_LIMIT_COMPOUND_SELECT a VALUES da mesma forma que outros compostos são limitados. Percorra a cadeia UNION ALL iterativamente na exclusão, ou limite EXPR_DEPTH antes que a árvore seja construída para que a limpeza não possa recursar além da pilha C. O trunk posterior (Bug 2026-10-04T05:34:47Z) é posterior a este GA.

Referências

  • sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • src/parse.y:562-567 skip de SELECT composto quando SF_Values está definido
  • src/insert.c:681-704 fallback UNION ALL de sqlite3MultiValues
  • src/expr.c:1406-1430 sqlite3ExprDeleteNN recursivo
  • sqlite.org/cves.html · sqlite.org/security.html
Baixar ferramenta