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-attachment-crlf — CakePHP 5.4.2 - Alta - Remoto - CRLF - Content-Type de anexo e Content-ID remanescente | Kitploit
Ferramentas/GitHubGitHub/abraxas/cakephp-attachment-crlf
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebVirtualização para SegurançaSegurança WebTestes de Penetração
GitHubabraxas/cakephp-attachment-crlf

cakephp-attachment-crlf

CakePHP 5.4.2 - Alta - Remoto - CRLF - Content-Type de anexo e Content-ID remanescente

Ver Repositório
2há 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-attachment-crlf

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

cakephp-attachment-crlf

Classe: Injeção de cabeçalho em parte MIME Alcance: Remoto

CakePHP 5.4.2 (887b641) - Cake Software Foundation

A versão 5.4.2 já remove ", \r e \n de name= / filename= em multipart (FormDataPart::_headerParameterToString). Esse é o controle. Content-Type e Content-ID foram deixados como concatenação bruta. Message::setAttachments copia o media type do cliente de um UploadedFile para esse campo de tipo sem filtro adicional.

Um app que anexa um upload de usuário, ou que passa um contentId de usuário, coloca esses bytes na parte MIME. getBodyString() então exibe uma segunda linha de cabeçalho sob essa parte.

IDainda sem CVE
ClasseInjeção de cabeçalho em parte MIME
AlcanceRemoto (app que anexa um upload de usuário ou um contentId de usuário)
CWECWE-93
CVSSMédio: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
ProdutoCakePHP
Afetado5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Autenticaçãoaplicação que anexa um upload de usuário (MIME do cliente UploadedFile) ou um contentId de usuário
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1

O que um atacante pode fazer

Alguém que consiga influenciar metadados de anexo que o app passa para Message::setAttachments / addAttachment pode injetar cabeçalhos de parte MIME.

PrivilégioMétodo / sinkTipoComprovado em lab ou inferido
Linha extra de cabeçalho Content-TypesetAttachments com 'mimetype' => "text/plain\\r\\nX-Injected: …"Integridade dos cabeçalhos da parte MIMEComprovado em lab. Linha testemunha presente
Linha extra de cabeçalho Content-ID'contentId' => "cid@…>\\r\\nX-Injected: …" (parte inline)Integridade dos cabeçalhos da parte MIMEComprovado em lab. Linha testemunha presente
Mesma injeção via MIME de uploadUploadedFile::getClientMediaType() copiado para mimetypeIntegridade dos cabeçalhos da parte MIMEComprovado em lab. Linha testemunha presente
CRLF em filename=nome do anexo com CR/LFFechadoComprovado fechado em lab. A remoção da 5.4.2 se mantém
RCPT de envelope / Bcc via este sinkcabeçalhos de parte MIME no corpoFechadoIsso é a remoção apenas de par do SmtpTransport, um irmão
Envio SMTPo lab chama apenas getBodyString()FechadoSem transporte, sem shell

Inferido da mesma concatenação, não demonstrado: um type ou contentId forjado que inclua um boundary multipart poderia dividir a mensagem em partes extras em um MUA receptor. Não enviei e-mail.

Outros resquícios do mesmo pin: window SQLi, collate SQLi, cache unserialize.

Como eu encontrei

Fiz o pin de cakephp/cakephp 5.4.2 após a nota da bakery de que a injeção em filename= de Content-Disposition multipart havia sido corrigida. _headerParameterToString é o sanitizador:

$transliterated = Text::transliterate(str_replace(['"', "\r", "\n"], '', $value));

__toString() ainda faz:

if ($this->type) {
    $out .= 'Content-Type: ' . $this->type . "\r\n";
}
if ($this->contentId) {
    $out .= 'Content-ID: <' . $this->contentId . ">\r\n";
}

Message::setAttachments copia o tipo do cliente do upload sem remoção. attachFiles / attachInlineFiles então chamam $part->type($fileInfo['mimetype']) e $part->contentId($fileInfo['contentId']).

Caminhos errados já registrados: tratar o RCPT do envelope como este resquício (a linha extra está no corpo); afirmar que filename= ainda injeta (não injeta); enviar SMTP; um reverse shell. Teatro.

Lab

python3 cakephp-attachment-crlf-Abraxas-Labs.py

ou

cd lab
./run.sh

Alvo apenas http://127.0.0.1:19460. PHP 8.3, tag 5.4.2 do CakePHP clonada no build. lab_server.php expõe Message::setAttachments. Quatro casos: controle de filename, mimetype, contentId, media type do UploadedFile.

SUCCESS cakephp-attachment-crlf how=live pin=5.4.2 sha=887b641de9f7aba06071f98f17edcbc573cbcf63 mimetype=yes contentId=yes upload=yes filename-stripped=yes CAKEPHP-ATTACHMENT-CRLF-WITNESS

A correção

Passe type, contentId e transferEncoding pela mesma remoção de " / \r / \n usada em _headerParameterToString. Rejeite o valor se ele ainda contiver uma quebra de linha após a remoção. Cubra o MIME do cliente do UploadedFile e mimetype / contentId explícitos nos testes do mailer, não apenas filename=.

Referências

  • github.com/cakephp/cakephp tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • Corrigido nas proximidades: remoção de filename= na bakery 5.4.2
  • Mesmo pin: cakephp-window-sqli · cakephp-collate-sqli · cakephp-cache-unserialize
  • CWE-93

Licença

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

Baixar ferramenta