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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cakephp-smtp-crlf — CakePHP 5.4.2 - 高危 - 远程 - 头部注入 - SmtpTransport 单独 LF 残留自 GHSA-2qh5 | Kitploit
工具/GitHubGitHub/abraxas/cakephp-smtp-crlf
漏洞分析漏洞利用Web应用程序漏洞利用安全虚拟化Web安全渗透测试电子邮件安全
GitHubabraxas/cakephp-smtp-crlf

cakephp-smtp-crlf

CakePHP 5.4.2 - 高危 - 远程 - 头部注入 - SmtpTransport 单独 LF 残留自 GHSA-2qh5

查看仓库
12天前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Abraxas Labs - cakephp-smtp-crlf

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

cakephp-smtp-crlf

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

CakePHP 5.4.2 (887b641) - Cake Software Foundation

GHSA-2qh5 / CVE-2026-77634 在 SmtpTransport 和 MailTransport 上添加了 str_replace("\r\n", '', $val)。该回调对单独的 LF 或 CR 无效。邮件头名称仍然未经清理地拼接。PHP mail() 和我们捕获的 SMTP DATA 都将单独的 LF 视为新的邮件头行。

如果应用将用户数据复制到自定义邮件头中,攻击者可以通过发送 LF 而不是 CRLF 来添加 Bcc、重写 Subject 或侵入正文。 已公布的修复并不能阻止这一点。原版 cakephp/app 本身不会将请求数据放入自定义邮件头。

ID暂无 CVE
类别邮件头注入(GHSA-2qh5 遗留的单独 LF)
可达性远程(与 GHSA-2qh5 相同:应用将用户数据复制到 Message::setHeaders)
CWECWE-93
CVSS高危:7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
产品CakePHP
受影响版本5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
认证与 GHSA-2qh5 相同:应用将用户数据复制到 Message::setHeaders / addHeaders
许可证GNU Affero GPL v3.0
实验环境仅限 127.0.0.1

攻击者能做什么

需要一个将请求数据放入自定义邮件头的应用。

权限方法 / 汇聚点实验验证或推断
向 SMTP DATA 邮件头块注入额外的 Bcc:(或 Cc: / To:)行setHeaders(['X-Meta' => "ok\nBcc: [email protected]"]) 然后 SmtpTransport::send实验验证。SMTP DATA 和 getHeadersString 都显示新增的 Bcc: 行。见证 X-Oracle: CAKEPHP-SMTP-CRLF-WITNESS
通过 MailTransport 进行相同注入MailTransport::send 中的相同回调在 getHeadersString 上实验验证,使用 MailTransport 的包含列表和剥离回调。本实验不调用 PHP mail()
单独 CR 以及单独 LFok\rBcc: ...实验验证。仅剥离成对字符会留下 \r;按 CR/LF 拆分的邮件头解析器会将其视为新行
重写 Subject 或侵入正文值包含 \nSubject: 或 \n\n从相同拼接推断。实验注入的是 Bcc / X-Oracle,而非 Subject
额外信封收件人在 DATA 内注入 Bcc推断。某些 MTA 会重新解析 DATA。Cake 的 RCPT TO 仍然只使用 Message 对象上的 setTo / setCc / setBcc
两字节 \r\n 对GHSA-2qh5 剥离实验验证已关闭。对照组拼接为 okBcc:...
对骨架应用进行未认证 RCE非此遗留问题已关闭
多部分 filename= CRLF5.4.2 已剥离 "/\r/\n已关闭

我是如何发现的

在 GHSA-2qh5、GHSA-fxf7、GHSA-vjqc 以及 5.4.2 的 filename= 说明之后,我锁定了 cakephp/cakephp 5.4.2。传输测试只发送 "line one\r\nline two" 并期望得到 line oneline two。

SmtpTransport 5.4.2:

$headers = $message->getHeadersString(
    [...],
    "\r\n",
    function (string $val): string {
        return str_replace("\r\n", '', $val);
    },
);

MailTransport 使用相同的回调。Message::getHeadersString 将回调映射到值上,然后执行 $key . ': ' . $val。

已记录的弯路:将 GHSA-2qh5 视为已关闭并就此离开;在实验中调用 PHP mail()(预言机是 SMTP DATA 加上 getHeadersString);将其夸大为对骨架应用的未认证 RCE。作秀:反向 shell。

实验环境

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

或

cd lab
./run.sh

在 PHP 8.3 中使用 Composer cakephp/cakephp:5.4.2。回环 SMTP 接收器位于 127.0.0.1:19410。

  1. 对照组:X-Meta = ok\r\nBcc: [email protected]\r\nX-Oracle: CAKEPHP-SMTP-CRLF-WITNESS。结果:一个邮件头 X-Meta: okBcc: [email protected]: CAKEPHP-SMTP-CRLF-WITNESS。
  2. LF 用例:相同载荷,仅使用 \n。结果:SMTP DATA、Smtp getHeadersString 和 Mail getHeadersString 中出现新的 Bcc: 和 X-Oracle: 行。
  3. CR 用例:相同,仅使用 \r。相同的额外行。
SUCCESS cakephp-smtp-crlf pin=5.4.2 control-crlf-stripped=yes lf-bcc=yes cr-leftover=yes how=smtp-data-bcc-line CAKEPHP-SMTP-CRLF-WITNESS

修复方案

剥离或拒绝邮件头名称和值中的任何 \r 或 \n(与 5.4.2 的 filename= 清理器相同)。在传输测试中覆盖单独 LF 和单独 CR,而不仅仅是 \r\n 对。

参考资料

  • github.com/cakephp/cakephp 标签 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • src/Mailer/Transport/SmtpTransport.php · src/Mailer/Transport/MailTransport.php · src/Mailer/Message.php
  • 附近已修补(仅成对):GHSA-2qh5-382h-3jpc / CVE-2026-77634
  • CWE-93

许可证

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

下载工具