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
cakephp-collate-sqli — CakePHP 5.4.2 - Alta - Remota - SQLi - COLLATE collation é um fragmento SQL bruto | Kitploit
Ferramentas/GitHubGitHub/abraxas/cakephp-collate-sqli
Scanners de VulnerabilidadesAnálise de VulnerabilidadesExploraçãoExploração de Aplicações WebSegurança WebTestes de PenetraçãoSegurança de Banco de Dados
GitHubabraxas/cakephp-collate-sqli

cakephp-collate-sqli

CakePHP 5.4.2 - Alta - Remota - SQLi - COLLATE collation é um fragmento SQL bruto

Ver Repositório
há 4 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 - cakephp-collate-sqli

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  cakephp-collate-sqli

cakephp-collate-sqli

Classe: SQLi Alcance: Remoto

CakePHP 5.4.2 (887b641) - Cake Software Foundation

StringExpression::sql vincula o valor da string e concatena a collation. IdentifierExpression faz o mesmo. Não existe ensureSimpleString. O quoteIdentifier do Postgres é '"' . trim($collation, '"') . '"', então uma aspa embutida fecha o CAST prematuramente.

Uma aplicação que repassa a collation de requisição/locale para new StringExpression($term, $collation) coloca essa string no COLLATE. O valor permanece vinculado. A collation não.

IDainda sem CVE
ClasseSQLi
AlcanceRemoto (aplicação que repassa collation/locale para StringExpression / IdentifierExpression)
CWECWE-89
CVSSAlto: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
ProdutoCakePHP (cakephp/database)
Afetado5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Autenticaçãoaplicação que repassa collation/locale para esses construtores
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1

O que um atacante pode fazer

Requer uma aplicação que passe a collation de usuário/locale para esses construtores. O cakephp/app padrão não expõe collation em um formulário público por si só.

PrivilégioMétodo / sinkTipoComprovado em lab ou inferido
Inserir SQL após COLLATEStringExpression::sql concatena $this->collationIntegridade do SQL compiladoComprovado em lab. O SQL bruto contém o payload não vinculado
Mesma inserção em identificadoresIdentifierExpression note COLLATE <payload>Integridade do SQL compiladoComprovado em lab. id_raw_sql contém o payload
Escapar do encapsulamento "..." do PostgresquoteIdentifier = '"' . trim($collation, '"') . '"'Integridade do SQL compiladoComprovado em lab. O SQL compilado é COLLATE "C" AS text)) || (SELECT ...
Executar o escape e ler outra tabelaCAST(... ) || (SELECT note FROM lab_secret ...)Reconhecimento do BDComprovado em lab. Resultado xCAKEPHP-COLLATE-SQLI-WITNESS, sem erro de execução
Modificar linhas / mais SQL com o papel da conexãoMesma injeçãoIntegridade do BDInferido. O lab é um oráculo SELECT
Controle negativocollation CFechadoComprovado em lab. Resultado x, sem witness, compilado COLLATE "C"

Fechado neste resíduo: valor de string vinculado (:c0 permanece o literal x); uma collation que passaria em ensureSimpleString (^[a-zA-Z0-9]+$) não é este payload. Não é RCE não autenticado em uma aplicação esqueleto. Não é um shell.

Outros resíduos do mesmo pin: window SQLi, attachment CRLF, cache unserialize.

Como eu encontrei

Fiz o pin em 5.4.2 após as notas de FunctionsBuilder / filename=. Dez buscas. A passagem de SQLi restante é esta. StringExpression::sql:

$placeholder = $binder->placeholder('c');
$binder->bind($placeholder, $this->string, 'string');
return $placeholder . ' COLLATE ' . $this->collation;

O quoteIdentifier do Postgres encapsula com aspas ASCII e trim($collation, '"'). Uma " embutida fecha o identificador. -- consome o fechamento restante que o Cake ainda acrescenta.

Caminhos errados já registrados: SQLite como único driver (a concatenação é real, o escape do encapsulamento é do Postgres); tratar o valor vinculado como a injeção; afirmar que ensureSimpleString já rodou aqui (não rodou); um reverse shell. Teatro.

Lab

python3 cakephp-collate-sqli-Abraxas-Labs.py

ou

cd lab
./run.sh

Alvo apenas http://127.0.0.1:19450. cakephp/database 5.4.2 mais Postgres 16. Aplicação mínima repassa ?collation= para StringExpression / IdentifierExpression e executa CAST(... AS text). A tabela secreta contém o witness.

SUCCESS cakephp-collate-sqli pin=5.4.2 raw=concat pg-wrap=breakout exec=yes CAKEPHP-COLLATE-SQLI-WITNESS

A correção

ensureSimpleString() (ou uma allowlist de collation) no argumento de collation. O Postgres deve citar identificadores corretamente, não trim mais encapsulamento.

Referências

  • github.com/cakephp/cakephp tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • StringExpression.php · IdentifierExpression.php · Postgres.php
  • Próximo corrigido: CVE-2026-79752 ensureSimpleString()
  • Mesmo pin: cakephp-window-sqli · cakephp-attachment-crlf · cakephp-cache-unserialize
  • CWE-89

Licença

GNU Affero GPL v3.0. Veja LICENSE. Apenas lab em loopback. Sem garantia.

Baixar ferramenta