CRLF注入在libcurl的SMTP客户端通过–mail-from和–mail-rcpt允许SMTP命令走私
摘要
libcurl的SMTP客户端通过–mail-from和–mail-rcpt参数存在CRLF注入漏洞。攻击者可以注入换行字符来走私SMTP命令如VRFY,可能启用用户枚举或协议滥用。虽然curl可能在注入后失败,但注入的命令由SMTP服务器执行,确认了漏洞存在。
AI声明
是的,我使用了AI来发现此漏洞。
受影响版本
我在Ubuntu 24.04.2上测试了:
- curl 8.5.0(系统)
- curl 8.15.0-DEV(本地构建)
- PycURL/7.45.6 with libcurl/8.12.1-DEV
完整系统curl版本:
|
|
完整本地构建版本:
|
|
复现步骤
-
运行测试SMTP服务器;我使用的服务器名为smtp_server,以
./smtp_server
运行并在localhost:1025监听 -
使用正常电子邮件地址发送邮件,例如:
|
|
其中mail.txt是文本文件 - curl正常完成
- 现在发送带有注入CRLF的邮件,例如在"from"字段中:
|
|
curl失败并显示DATA failed: 250
,因为服务器向注入的VRFY命令发送了250 OK而不是预期的354;这证明了CRLF注入的发生
我认为问题出现在smtp.c中的smtp_perform_mail函数中的"MAIL FROM:%s%s%s%s%s%s"
连接邮件字段时没有进行清理(并且smtp_parse_address也不清理"\r\n"
)。
支持材料/参考
正常邮件发送:
|
|
在"from"字段中发送带有CRLF的邮件:
|
|
在"rcpt"字段中发送带有CRLF的邮件:
|
|
使用pycURL发送带有CRLF的邮件:
|
|
服务器日志(用于说明):
|
|
smtp_server脚本:
|
|
send-with-pycurl脚本:
|
|
影响
摘要: 此漏洞允许攻击者通过制作恶意电子邮件地址来注入任意SMTP命令,如VRFY。它可能导致用户枚举、绕过客户端限制或中断SMTP会话,特别是在自动化或基于代理的电子邮件工作流程中。
时间线
- 13天前:skrcprst向curl提交报告
- 13天前:bagder(curl工作人员)发表评论:“感谢您的报告!我们将花时间调查您的报告,并尽快给您回复详细信息和可能的后续问题!很可能在接下来的24小时内。”
- 13天前:icing(curl工作人员)发表评论:“您是否知道到目前为止,AI发现的漏洞成功率为0%?而且我们有相当好的样本量…”
- 13天前:bagder(curl工作人员)发表评论:“我不认为curl或libcurl声称这些选项是万无一失的。我不认为过滤用户可能提供的所有可能的垃圾是curl的责任。事实上,发送额外的垃圾通常被curl用户用来验证服务器等。这不是一个合法的’漏洞’,因为攻击者不会随机拥有访问权限和在curl命令行中插入内容的能力。如果攻击者可以修改命令行,几乎所有赌注都失效了,无尽的黑客能力都会打开。因此,这种’攻击’只能由用户自己完成。然后这就不是攻击。这是普通用法。”
- 13天前:skrcprst发表评论:“根据评论,我同意关闭此报告。感谢您的时间。”
- 13天前:jimfuller2024(curl工作人员)发表评论:“此报告中有一些有缺陷的假设:1)有权使用curl的用户可以使用它…如果您希望客户端向服务器发送垃圾,您可以这样做…您也可以下载恶意软件或泄露秘密。用户是负责任的。期望设置’防护栏’来避免’footguns’是错误的期望。2)客户端安全与服务器安全不同。也许我遗漏了什么,作者可以提供更多细节,但我没有看到任何安全问题。”
- 13天前:skrcprst关闭报告并将状态更改为"不适用"
- 13天前:bagder(curl工作人员)请求披露此报告:“根据项目的透明度政策,我们希望所有报告都被披露并公开。”
- 13天前:skrcprst同意披露此报告
- 13天前:此报告已被披露
报告详情
- 报告时间:2025年7月3日,UTC时间5:49
- 报告人:skrcprst
- 报告对象:curl
- 报告ID:#3235428
- 严重性:中等(4 ~ 6.9)
- 披露时间:2025年7月3日,UTC时间22:57
- 弱点:CRLF注入
- CVE ID:无
- 赏金:隐藏
- 账户详情:无