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 中危) ![GHSA](https://img.shields.io/badge/GHSA-q537--8fr5--cw35-orange) ![CVE](https://img.shields.io/badge/CVE--2026--33693-red) ![CVSS](https://img.shields.io/badge/CVSS-6.5%20Moderate-yellow) ![Platform](https://img.shields.io/badge/Platform-cargo-blue) ![CWE](https://img.shields.io/badge/CWE--918-purple) **关键词:** 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, 中等风险, 协议操纵, 可视化界面, 服务器端请求伪造, 本地主机访问, 漏洞分析, 网络安全, 联邦协议, 路径探测, 输入验证不足, 隐私保护