SnailSploit/CVE-2026-33693
GitHub: SnailSploit/CVE-2026-33693
这是一个 CVE 漏洞分析仓库,详细记录了 activitypub-federation-rust 库中因 IP 验证遗漏「未指定地址」检查而导致的 SSRF 绕过漏洞,提供完整的攻击链分析、修复建议和披露时间线。
Stars: 0 | Forks: 0
# CVE-2026-33693:activitypub-federation-rust `v4_is_invalid()` 中通过 0.0.0.0 绕过导致的 SSRF (CVSS 6.5 中危)





**关键词:** SSRF, 0.0.0.0, IP 验证绕过, activitypub-federation, Lemmy, Rust, ActivityPub
## 目录
- [概述](#overview)
- [漏洞详情](#vulnerability-details)
- [技术分析](#technical-analysis)
- [攻击链](#attack-chain)
- [影响](#impact)
- [修复建议](#remediation)
- [CVSS v3.1 指标](#cvss-v31-metrics)
- [时间线](#timeline)
- [参考链接](#references)
- [联系方式](#contact)
- [免责声明](#disclaimer)
## 概述
`activitypub-federation-rust` 库(被 Lemmy 及 6 个以上下游项目使用)中存在一个服务端请求伪造 (SSRF) 漏洞,原因是 `v4_is_invalid()` 函数中的 IP 地址验证检查不完整。该函数未调用 `is_unspecified()`,允许攻击者通过针对 `0.0.0.0` 绕过 SSRF 保护 —— 该地址在大多数系统上映射到 localhost。
- **包名:** `activitypub_federation` (Rust/cargo)
- **受影响版本:** <= 0.7.1
- **修复于:** PR [#162](https://github.com/LemmyNet/activitypub-federation-rust/pull/162)
## 漏洞详情
`src/utils.rs` 中的 `v4_is_invalid()` 函数用于验证 IPv4 地址以阻止内部网络访问。它检查了环回地址 (`127.0.0.0/8`)、私有网段 (`10.0.0.0/8`, `172.16.0.0/12`, `192.168.0.0/16`)、链路本地地址 (`169.254.0.0/16`) 和广播地址 (`255.255.255.255`),但**未检查未指定地址 `0.0.0.0`**。
在大多数系统上,`0.0.0.0` 解析为环回接口,授予与 `127.0.0.1` 相同的访问权限。
**次要发现:** 还存在一个 DNS 重绑定 / TOCTOU 漏洞,其中 `lookup_host()` 解析主机名并验证 IP,但单独的 `reqwest` 调用执行了第二次 DNS 解析 —— 允许攻击者先提供一个安全的 IP,然后在第二次解析时重新绑定到内部 IP。
## 技术分析
### 漏洞代码 (`src/utils.rs`)
```
fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
// MISSING: || ip.is_unspecified() <- 0.0.0.0 not blocked
}
```
### 修复后代码
```
fn v4_is_invalid(ip: &Ipv4Addr) -> bool {
ip.is_loopback()
|| ip.is_private()
|| ip.is_link_local()
|| ip.is_broadcast()
|| ip.is_unspecified() // <- Now blocks 0.0.0.0
}
```
## 攻击链
```
+---------------------------------------------------+
| SSRF via 0.0.0.0 Bypass |
+---------------------------------------------------+
| |
| 1. Attacker hosts ActivityPub object with |
| URL pointing to http://0.0.0.0:/path |
| |
| 2. Lemmy instance fetches the object via |
| activitypub-federation-rust |
| |
| 3. v4_is_invalid() checks IP address: |
| x is_loopback() -> false (not 127.x) |
| x is_private() -> false (not RFC1918) |
| x is_link_local() -> false (not 169.254.x) |
| x is_broadcast() -> false (not 255.x) |
| x is_unspecified() -> NOT CHECKED |
| Result: 0.0.0.0 PASSES validation |
| |
| 4. Request sent to 0.0.0.0 -> resolves to |
| localhost -> accesses internal services |
| |
| 5. Internal service data returned to attacker |
| via ActivityPub federation response |
| |
+---------------------------------------------------+
```
## 影响
**下游影响:** `activitypub-federation-rust` crate 被 Fediverse 生态系统中的 **6 个以上项目** 使用:
| 项目 | Stars | 描述 |
|---------|-------|-------------|
| [Lemmy](https://github.com/LemmyNet/lemmy) | 13.7K+ | Fediverse 的链接聚合器 |
| [hatsu](https://github.com/importantimport/hatsu) | -- | ActivityPub 桥接器 |
| [gill](https://github.com/oknozor/gill) | -- | 支持联邦的 Git 托管 |
| [ties](https://github.com/ties-social/ties) | -- | 社交网络 |
| [fediscus](https://github.com/fediscus/fediscus) | -- | 联邦讨论 |
| [fediverse-axum](https://github.com/fediverse-axum) | -- | ActivityPub 框架 |
攻击者可以:
- **访问内部服务**(数据库、管理面板、云元数据端点)
- **扫描** Lemmy/联邦服务器上的**内部端口**
- 通过元数据 API **窃取云凭证**
## 修复建议
- **升级** `activitypub-federation` 至包含 PR [#162](https://github.com/LemmyNet/activitypub-federation-rust/pull/162) 修复的版本
- **Lemmy 用户:** 应用来自 [lemmy#6411](https://github.com/LemmyNet/lemmy/pull/6411) 的回移植修复
## CVSS v3.1 指标
| 指标 | 值 |
|--------|-------|
| **攻击矢量 (Attack Vector)** | 网络 (Network) |
| **攻击复杂度 (Attack Complexity)** | 低 (Low) |
| **所需权限 (Privileges Required)** | 无 (None) |
| **用户交互 (User Interaction)** | 无 (None) |
| **范围 (Scope)** | 未改变 (Unchanged) |
| **机密性 (Confidentiality)** | 低 (Low) |
| **完整性 (Integrity)** | 低 (Low) |
| **可用性 (Availability)** | 无 (None) |
| **CVSS 矢量** | `CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N` |
| **分值** | **6.5 (中危)** |
## 时间线
| 日期 | 事件 |
|------|-------|
| 2026-03-11 | 通过 GitHub PVRT 报告漏洞 |
| 2026-03-13 | 维护者确认发现 |
| 2026-03-13 | 提交修复 PR [#162](https://github.com/LemmyNet/activitypub-federation-rust/pull/162) |
| 2026-03-13 | 咨询意外关闭 |
| 2026-03-16 | 咨询重新开启 |
| 2026-03-23 | 分配 CVE-2026-33693 并发布咨询 |
## 参考链接
- [GHSA-q537-8fr5-cw35](https://github.com/LemmyNet/lemmy/security/advisories/GHSA-q537-8fr5-cw35)
- [CVE-2026-33693](https://www.cve.org/CVERecord?id=CVE-2026-33693)
- [修复 PR #162](https://github.com/LemmyNet/activitypub-federation-rust/pull/162)
- [Lemmy 回移植 PR #6411](https://github.com/LemmyNet/lemmy/pull/6411)
- [CWE-918: 服务端请求伪造](https://cwe.mitre.org/data/definitions/918.html)
## 联系方式
- **网站:** [snailsploit.com](https://snailsploit.com)
- **GitHub:** [@SnailSploit](https://github.com/SnailSploit)
- **LinkedIn:** [/in/kaiaizen](https://linkedin.com/in/kaiaizen)
## 免责声明
本仓库作为负责任漏洞披露的一部分,仅用于教育和防御目的发布。该漏洞是通过 GitHub 的私有漏洞报告 (PVRT) 流程报告的。未针对生产系统进行任何利用操作。所有测试均在隔离环境中进行。
标签:0.0.0.0绕过, ActivityPub, activitypub-federation-rust, Cargo, CISA项目, CVE-2026-33693, CVSS 6.5, CWE-918, IP验证绕过, Lemmy, Rust安全漏洞, SSRF, 中等风险, 协议操纵, 可视化界面, 服务器端请求伪造, 本地主机访问, 漏洞分析, 网络安全, 联邦协议, 路径探测, 输入验证不足, 隐私保护