Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cakephp-attachment-crlf — CakePHP 5.4.2 - Alto - Remoto - CRLF - attachment Content-Type e Content-ID residui | Kitploit
Strumenti/GitHubGitHub/abraxas/cakephp-attachment-crlf
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebVirtualizzazione per la SicurezzaSicurezza WebPenetration Testing
GitHubabraxas/cakephp-attachment-crlf

cakephp-attachment-crlf

CakePHP 5.4.2 - Alto - Remoto - CRLF - attachment Content-Type e Content-ID residui

Vedi Repository
24 giorni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Abraxas Labs - cakephp-attachment-crlf

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

cakephp-attachment-crlf

Classe: MIME-part header injection Reach: Remoto

CakePHP 5.4.2 (887b641) - Cake Software Foundation

5.4.2 rimuove già ", \r e \n dai multipart name= / filename= (FormDataPart::_headerParameterToString). Questo è il controllo. Content-Type e Content-ID sono stati lasciati come concatenazione grezza. Message::setAttachments copia il client media type di un UploadedFile in quel campo type senza alcun filtro aggiuntivo.

Un'app che allega un upload dell'utente, o che passa un contentId dell'utente, mette quei byte sulla MIME part. getBodyString() mostra quindi una seconda riga di header sotto quella part.

IDnessuna CVE al momento
ClasseMIME-part header injection
ReachRemoto (app che allega un upload dell'utente o un contentId dell'utente)
CWECWE-93
CVSSMedium: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
ProdottoCakePHP
Affetto5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Authapplicazione che allega un upload dell'utente (MIME client di UploadedFile) o un contentId dell'utente
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Chi può influenzare i metadati degli allegati che l'app passa a Message::setAttachments / addAttachment può iniettare header di MIME-part.

PrivilegioMetodo / sinkTipoProvato in lab o dedotto
Riga header Content-Type aggiuntivasetAttachments con 'mimetype' => "text/plain\\r\\nX-Injected: …"Integrità degli header della MIME partProvato in lab. Riga witness presente
Riga header Content-ID aggiuntiva'contentId' => "cid@…>\\r\\nX-Injected: …" (part inline)Integrità degli header della MIME partProvato in lab. Riga witness presente
Stessa iniezione tramite MIME dell'uploadUploadedFile::getClientMediaType() copiato su mimetypeIntegrità degli header della MIME partProvato in lab. Riga witness presente
CRLF in filename=nome allegato con CR/LFChiusoProvato chiuso in lab. Lo strip di 5.4.2 regge
RCPT envelope / Bcc tramite questo sinkheader di MIME part nel bodyChiusoÈ lo strip solo-coppia di SmtpTransport, un sibling
Invio SMTPil lab chiama solo getBodyString()ChiusoNessun transport, nessuna shell

Dedotto dalla stessa concatenazione, non dimostrato: un type o contentId craftato che include un boundary multipart potrebbe dividere il messaggio in part extra in un MUA ricevente. Non ho inviato mail.

Altri residui dello stesso pin: window SQLi, collate SQLi, cache unserialize.

Come l'ho trovato

Ho fissato cakephp/cakephp 5.4.2 dopo la nota della bakery secondo cui l'iniezione multipart Content-Disposition filename= era stata corretta. _headerParameterToString è il sanitizer:

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

__toString() fa ancora:

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

Message::setAttachments copia il client type dell'upload senza strip. attachFiles / attachInlineFiles chiamano poi $part->type($fileInfo['mimetype']) e $part->contentId($fileInfo['contentId']).

Vicoli ciechi già registrati: trattare l'RCPT envelope come questo residuo (la riga extra è nel body); sostenere che filename= inietti ancora (non lo fa); inviare SMTP; una reverse shell. Teatro.

Lab

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

oppure

cd lab
./run.sh

Target solo http://127.0.0.1:19460. PHP 8.3, tag CakePHP 5.4.2 clonato in build. lab_server.php espone Message::setAttachments. Quattro casi: controllo filename, mimetype, contentId, media type di 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

La correzione

Far passare type, contentId e transferEncoding attraverso lo stesso strip di " / \r / \n di _headerParameterToString. Rifiutare il valore se contiene ancora un line break dopo lo strip. Coprire il MIME client di UploadedFile e i mimetype / contentId espliciti nei test del mailer, non solo filename=.

Riferimenti

  • github.com/cakephp/cakephp tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • Correlato già patchato: strip filename= della bakery 5.4.2
  • Stesso pin: cakephp-window-sqli · cakephp-collate-sqli · cakephp-cache-unserialize
  • CWE-93

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo lab su loopback. Nessuna garanzia.

Scarica lo strumento