# Mailpit HTML检查API SSRF漏洞
## 概述
Mailpit 是一个面向开发者的邮件测试工具和 API。在 1.28.3 之前版本中,存在一个通过 HTML Check CSS 下载引发的服务器端请求伪造(SSRF)漏洞。
## 影响版本
- 受影响版本:低于 1.28.3 的所有版本
- 修复版本:1.28.3
## 细节
- 漏洞位置:`/api/v1/message/{ID}/html-check` 接口
- 触发条件:该接口在执行 HTML 邮件兼容性检测时,会调用 `inlineRemoteCSS()` 函数
- 漏洞机制:`inlineRemoteCSS()` 会自动下载 HTML 中 `<link rel="stylesheet" href="...">` 标签指向的外部 CSS 文件以进行内联处理,未对目标 URL 做限制,导致攻击者可通过恶意 HTML 邮件诱导服务器向内网或任意外部地址发起请求,实现 SSRF
## 影响
- 攻击者可利用该漏洞进行服务器端请求伪造(SSRF),探测或访问受限内网服务
- 可能导致敏感信息泄露、内网服务被滥用或进一步攻击
是否为 Web 类漏洞: 未知
判断理由:
| # | POC 描述 | 源链接 | 神龙链接 |
|---|
标题: Release v1.28.3 · axllent/mailpit · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
### 关键漏洞信息
- ** GHSA-54wq-72mp-cq7c **
- **问题描述**:确保证SMTP `TO` 和 `FROM` 地址符合RFC 5322标准,防止header注入。
- ** GHSA-6jxm-fv7w-rw5j **
- **问题描述**:通过HTML检查API防止通过API的Server-Side Request Forgery (SSRF)。
### 其他更新
- **修正项**:
- 正确渲染在设置改变后的发布模式中的默认地址。
- 正确检测install.sh脚本中的macOS组。
- 使用纯文本认证时自动标记使用SMTP用户名。
- 根据RFC5321(第4.5.3.1节),验证电子邮件地址的最大长度。
- **测试项**:
- 通过长度限制和`@`字符更新标签测试。
- 增加SMTP测试,符合RFC 5322地址标准和防止header注入。
- 增加邮件长度验证测试,符合RFC5321(第4.5.3.1节)。
标题: Server-Side Request Forgery (SSRF) via HTML Check API · Advisory · axllent/mailpit · GitHub -- 🔗来源链接
标签:x_refsource_CONFIRM
神龙速读:
从这个网页截图中可以获取到以下关于漏洞的关键信息,以简洁的Markdown格式列出:
### 漏洞概要
- **漏洞类型**: Server-Side Request Forgery (SSRF) via HTML Check API
- **严重性**: Moderate (5.8/10)
- **CVE ID**: CVE-2026-23845
- **受影响版本**: <= v1.28.2, < v0.0.0-20260117230009
- **已修复版本**: v1.28.3, v0.0.0-20260117230009
### 受影响组件
- **Primary File**: `internal/htmlcheck/css.go`
- **API Endpoint**: `/api/v1/message/{ID}/html-check`
- **Handler**: `server/apiv1/other.go`
- **Vulnerable Functions**:
- `inlineRemoteCSS()` - line 132
- `downloadToBytes()` - line 193
- `isURL()` - line 221
### 技术细节
1. **不充分的URL验证(`isURL()`函数)**: 只检查了URL的协议是否为`http`或`https`,没有验证Host和IP。
2. **无限制的下载(`downloadToBytes()`函数)**: 在下载过程中,没有对IP进行验证。
3. **自动CSS处理(`inlineRemoteCSS()`函数)**: 在处理`<link>`标签的`href`属性时,进行了不充分的验证。
### 攻击向量
- **Cloud Metadata Credential Theft**:
- 攻击者发送包含恶意CSS链接的HTML邮件。
- Mailpit服务向AWS元数据端点发起GET请求并下载IAM凭证。
- 凭证可能通过日志或错误消息泄露。
### Proof of Concept
- 提供了Python脚本`ssrf_htmlcheck_poc.py`作为完整的工作利用示例。
- 运行命令: `python3 ssrf_htmlcheck_poc.py`
- **PoC流程**:
1. 启动SSRF监听器。
2. 发送包含恶意CSS链接的HTML邮件。
3. 触发HTML检查。
4. 监控并分析回调响应。
5. 展示针对本地监听器、云元数据端点、内部服务和私有网络范围的利用。
### 手动测试
- 通过`smtp`发送包含恶意HTML的邮件。
- 获取邮件ID并触发SSRF攻击。
这些信息展示了该漏洞的具体原理、触发条件以及验证方法,对于安全研究人员和开发人员进行漏洞修复和防护测试具有重要价值。
标题: Security: Prevent Server-Side Request Forgery (SSRF) via HTML Check A… · axllent/mailpit@1679a0a · GitHub -- 🔗来源链接
标签:x_refsource_MISC
神龙速读:
从网页截图中获取到的关键信息如下:
- **漏洞类型**: 服务器端请求伪造(SSRF)
- **漏洞描述**: 通过HTML检查API防止SSRF。
- **修复措施**:
- 增加了对URL的有效性检查,跳过无效的URL。
- 对于下载远程CSS和字体的配置,仅在配置允许时进行下载,否则跳过。
- 在下载过程中,增加了错误处理,如果下载失败,记录错误并继续。
- 修改了HTTP客户端的创建方式,增加了请求超时设置。
- 对响应头的`Content-Type`进行检查,确保其为`text/css`。
- 设置了读取字节的限制,最大为5MB。
- 限制了HTTP重定向的次数,超过3次则返回错误。
- URL必须是`http`或`https`协议,且不能包含登录信息。
```markdown
### 关键信息
- **漏洞类型**: 服务器端请求伪造 (SSRF)
- **漏洞描述**: 通过HTML检查API防止SSRF
- **修复措施**:
- 增加URL有效性检查和错误处理
- 限制HTTP客户端请求超时和重定向次数
- 检查响应头的`Content-Type`为`text/css`
- 设置读取字节限制为5MB
```
暂无评论