Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cakephp-attachment-crlf — CakePHP 5.4.2 – Hoch – Remote – CRLF – Content-Type und Content-ID von Anhängen verbleiben | Kitploit
Tools/GitHubGitHub/abraxas/cakephp-attachment-crlf
SchwachstellenanalyseExploitationWebanwendungs-ExploitationSicherheitsvirtualisierungWebsicherheitPenetrationstests
GitHubabraxas/cakephp-attachment-crlf

cakephp-attachment-crlf

CakePHP 5.4.2 – Hoch – Remote – CRLF – Content-Type und Content-ID von Anhängen verbleiben

Repository anzeigen
15vor 9 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

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

Klasse: MIME-Part-Header-Injection Reichweite: Remote

CakePHP 5.4.2 (887b641) – Cake Software Foundation

5.4.2 entfernt bereits ", \r und \n aus den Multipart-Parametern name= / filename= (FormDataPart::_headerParameterToString). Das ist die Kontrolle. Content-Type und Content-ID wurden als rohe Verkettung belassen. Message::setAttachments kopiert den Client-Media-Type einer UploadedFile ohne zusätzlichen Filter in dieses Typfeld.

Eine App, die einen Benutzer-Upload anhängt oder eine benutzerseitige contentId durchreicht, platziert diese Bytes im MIME-Part. getBodyString() zeigt dann eine zweite Header-Zeile unter diesem Part.

IDnoch keine CVE
KlasseMIME-Part-Header-Injection
ReichweiteRemote (App, die einen Benutzer-Upload oder eine benutzerseitige contentId anhängt)
CWECWE-93
CVSSMittel: 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
ProduktCakePHP
Betroffen5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
AuthAnwendung, die einen Benutzer-Upload (Client-MIME der UploadedFile) oder eine benutzerseitige contentId anhängt
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1

Was ein Angreifer tun kann

Wer die Attachment-Metadaten beeinflussen kann, die die App an Message::setAttachments / addAttachment übergibt, kann MIME-Part-Header injizieren.

PrivilegMethode / SinkArtIm Lab nachgewiesen oder abgeleitet
Zusätzliche Content-Type-Header-ZeilesetAttachments mit 'mimetype' => "text/plain\\r\\nX-Injected: …"Integrität der MIME-Part-HeaderIm Lab nachgewiesen. Witness-Zeile vorhanden
Zusätzliche Content-ID-Header-Zeile'contentId' => "cid@…>\\r\\nX-Injected: …" (Inline-Part)Integrität der MIME-Part-HeaderIm Lab nachgewiesen. Witness-Zeile vorhanden
Dieselbe Injection über Upload-MIMEUploadedFile::getClientMediaType() auf mimetype kopiertIntegrität der MIME-Part-HeaderIm Lab nachgewiesen. Witness-Zeile vorhanden
filename= CRLFAttachment-Name mit CR/LFGeschlossenIm Lab als geschlossen nachgewiesen. Strip in 5.4.2 hält
Envelope-RCPT / Bcc über diesen SinkMIME-Part-Header im BodyGeschlossenDas ist der Pair-only-Strip von SmtpTransport, ein verwandter Fall
SMTP-VersandLab ruft nur getBodyString() aufGeschlossenKein Transport, keine Shell

Aus derselben Verkettung abgeleitet, nicht demonstriert: Ein präparierter Typ oder eine präparierte contentId, die eine Multipart-Boundary enthält, könnte die Nachricht in einem empfangenden MUA in zusätzliche Parts aufteilen. Ich habe keine Mail versendet.

Weitere Überbleibsel derselben Pin-Version: window SQLi, collate SQLi, cache unserialize.

Wie ich es gefunden habe

Ich habe cakephp/cakephp 5.4.2 gepinnt, nachdem der Bakery-Hinweis erschien, dass die Multipart-Content-Disposition-filename=-Injection behoben sei. _headerParameterToString ist der Sanitizer:

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

__toString() macht immer noch:

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

Message::setAttachments kopiert den Upload-Client-Typ ohne Strip. attachFiles / attachInlineFiles rufen dann $part->type($fileInfo['mimetype']) und $part->contentId($fileInfo['contentId']) auf.

Bereits festgehaltene Fehlversuche: das Envelope-RCPT als diesen Überrest zu behandeln (die zusätzliche Zeile befindet sich im Body); zu behaupten, filename= injiziere weiterhin (das tut es nicht); SMTP zu senden; eine Reverse Shell. Theater.

Lab

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

oder

cd lab
./run.sh

Ziele nur http://127.0.0.1:19460. PHP 8.3, CakePHP-Tag 5.4.2 beim Build geklont. lab_server.php stellt Message::setAttachments bereit. Vier Fälle: Dateinamen-Kontrolle, Mimetype, contentId, UploadedFile-Medientyp.

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

Die Behebung

Führe type, contentId und transferEncoding durch dieselbe " / \r / \n-Bereinigung wie _headerParameterToString. Lehne den Wert ab, wenn er nach der Bereinigung noch einen Zeilenumbruch enthält. Decke den Client-MIME von UploadedFile sowie explizites mimetype / contentId in den Mailer-Tests ab, nicht nur filename=.

Referenzen

  • github.com/cakephp/cakephp Tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • In der Nähe gepatcht: 5.4.2 bakery filename=-Bereinigung
  • Gleicher Pin: cakephp-window-sqli · cakephp-collate-sqli · cakephp-cache-unserialize
  • CWE-93

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.

Tool herunterladen