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
159 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

Write-up: https://abraxaslabs.tech/research/cakephp-attachment-crlf

cakephp-attachment-crlf

Classe: iniezione di header nelle parti MIME Portata: remota

CakePHP 5.4.2 (887b641) - Cake Software Foundation

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

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

IDnessuna CVE al momento
Classeiniezione di header nelle parti MIME
Portataremota (applicazione che allega un upload dell'utente o un contentId fornito dall'utente)
CWECWE-93
CVSSMedia: 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 fornito dall'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'applicazione passa a Message::setAttachments / addAttachment può iniettare header nelle parti MIME.

PrivilegioMetodo / sinkTipoDimostrato in lab o dedotto
Riga di header Content-Type aggiuntivasetAttachments con 'mimetype' => "text/plain\\r\\nX-Injected: …"Integrità degli header delle parti MIMEDimostrato in lab. Riga testimone presente
Riga di header Content-ID aggiuntiva'contentId' => "cid@…>\\r\\nX-Injected: …" (parte inline)Integrità degli header delle parti MIMEDimostrato in lab. Riga testimone presente
Stessa iniezione tramite MIME dell'uploadUploadedFile::getClientMediaType() copiato su mimetypeIntegrità degli header delle parti MIMEDimostrato in lab. Riga testimone presente
CRLF in filename=nome dell'allegato con CR/LFChiusoDimostrato chiuso in lab. La rimozione della 5.4.2 regge
RCPT dell'envelope / Bcc tramite questo sinkheader delle parti MIME nel corpoChiusoSi tratta della rimozione solo per coppie di SmtpTransport, un caso affine
Invio SMTPil lab chiama solo getBodyString()ChiusoNessun transport, nessuna shell

Dedotto dalla stessa concatenazione, non dimostrato: un type o contentId costruito ad arte che includa un boundary multipart potrebbe suddividere il messaggio in parti aggiuntive in un MUA ricevente. Non ho inviato email.

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 in 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 tipo di client di upload senza alcuna rimozione. attachFiles / attachInlineFiles chiamano poi $part->type($fileInfo['mimetype']) e $part->contentId($fileInfo['contentId']).

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

Lab

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

o

cd lab
./run.sh

Prendi di mira solo http://127.0.0.1:19460. PHP 8.3, CakePHP tag 5.4.2 clonato in fase di build. lab_server.php espone Message::setAttachments. Quattro casi: controllo del 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

Esegui type, contentId e transferEncoding attraverso la stessa rimozione di " / \r / \n usata da _headerParameterToString. Rifiuta il valore se contiene ancora un'interruzione di riga dopo la rimozione. Copri il MIME lato client di UploadedFile e mimetype / contentId espliciti nei test del mailer, non solo filename=.

Riferimenti

  • github.com/cakephp/cakephp tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • Correlati corretti: rimozione di filename= nella 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 laboratorio loopback. Nessuna garanzia.

Scarica lo strumento