Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cakephp-attachment-crlf — CakePHP 5.4.2 - 高危 - 远程 - CRLF - 附件 Content-Type 与 Content-ID 残留 | Kitploit
工具/GitHubGitHub/abraxas/cakephp-attachment-crlf
漏洞分析漏洞利用Web应用程序漏洞利用安全虚拟化Web安全渗透测试
GitHubabraxas/cakephp-attachment-crlf

cakephp-attachment-crlf

CakePHP 5.4.2 - 高危 - 远程 - CRLF - 附件 Content-Type 与 Content-ID 残留

查看仓库
24天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - cakephp-attachment-crlf

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

cakephp-attachment-crlf

类别: MIME 部件头部注入 可达性: 远程

CakePHP 5.4.2 (887b641) - Cake Software Foundation

5.4.2 已经从 multipart 的 name= / filename= 中剥离了 "、\r 和 \n(FormDataPart::_headerParameterToString)。这是对照组。Content-Type 和 Content-ID 则被保留为原始拼接。Message::setAttachments 将 UploadedFile 的客户端媒体类型复制到该类型字段中,且没有额外的过滤。

一个附加用户上传文件、或传入用户 contentId 的应用,会将这些字节放到 MIME 部件上。getBodyString() 随后会在该部件下显示第二行头部。

ID暂无 CVE
类别MIME 部件头部注入
可达性远程(附加用户上传文件或用户 contentId 的应用)
CWECWE-93
CVSS中危:5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
产品CakePHP
受影响版本5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
认证附加用户上传文件(UploadedFile 客户端 MIME)或用户 contentId 的应用
许可证GNU Affero GPL v3.0
实验环境仅限 127.0.0.1

攻击者能做什么

能够影响应用传入 Message::setAttachments / addAttachment 的附件元数据的人,可以注入 MIME 部件头部。

权限方法 / 汇聚点类型实验验证或推断
额外的 Content-Type 头部行setAttachments 配合 'mimetype' => "text/plain\\r\\nX-Injected: …"MIME 部件头部完整性实验验证。见证行存在
额外的 Content-ID 头部行'contentId' => "cid@…>\\r\\nX-Injected: …"(内联部件)MIME 部件头部完整性实验验证。见证行存在
通过上传 MIME 的相同注入UploadedFile::getClientMediaType() 被复制到 mimetypeMIME 部件头部完整性实验验证。见证行存在
filename= CRLF带 CR/LF 的附件名已关闭实验验证已关闭。5.4.2 的剥离有效
通过此汇聚点的信封 RCPT / Bcc正文中的 MIME 部件头部已关闭那是 SmtpTransport 仅针对配对的剥离,属于同类问题
SMTP 发送实验仅调用 getBodyString()已关闭无传输,无 shell

从相同拼接推断,但未演示:一个精心构造的 type 或 contentId 若包含 multipart 边界,可能在接收方 MUA 中将消息拆分为额外的部件。我没有发送邮件。

同一版本遗留问题:window SQLi、collate SQLi、cache unserialize。

我是如何发现的

在 bakery 说明 multipart Content-Disposition filename= 注入已修复后,我锁定了 cakephp/cakephp 5.4.2。_headerParameterToString 是净化器:

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

__toString() 仍然执行:

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

Message::setAttachments 复制上传客户端类型时没有剥离。attachFiles / attachInlineFiles 随后调用 $part->type($fileInfo['mimetype']) 和 $part->contentId($fileInfo['contentId'])。

已记录的弯路:将信封 RCPT 视为该遗留问题(额外行在正文中);声称 filename= 仍可注入(它不能);发送 SMTP;反弹 shell。都是表演。

实验环境

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

或

cd lab
./run.sh

仅针对 http://127.0.0.1:19460。PHP 8.3,构建时克隆 CakePHP 标签 5.4.2。lab_server.php 暴露 Message::setAttachments。四种情况:filename 对照、mimetype、contentId、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

修复方案

将 type、contentId 和 transferEncoding 通过 _headerParameterToString 相同的 " / \r / \n 剥离处理。如果剥离后值仍包含换行符,则拒绝该值。在邮件测试中覆盖 UploadedFile 客户端 MIME 以及显式的 mimetype / contentId,而不仅仅是 filename=。

参考资料

  • github.com/cakephp/cakephp 标签 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • FormDataPart.php · Message.php
  • 附近已修补:5.4.2 bakery filename= 剥离
  • 同一版本:cakephp-window-sqli · cakephp-collate-sqli · cakephp-cache-unserialize
  • CWE-93

许可证

GNU Affero GPL v3.0。参见 LICENSE。仅限回环实验环境。无担保。

下载工具