首页 网络安全 正文

Fedify URL验证安全绕过漏洞CVE-2026-50131

摘要

栋科技漏洞库关注到 Fedify 多个版本中存在的 URL 验证安全绕过漏洞,该漏洞现已被追踪为CVE-2026-50131,CVSS 3.X评分为8.6。

Fedify 是一个开源 TypeScript 框架,用于构建基于 ActivityPub 协议的联邦化(去中心化)社交服务器与应用,简化 ActivityPub 开发。

一、基本情况

Fedify 搭建类似 Mastodon、Pleroma 的联邦微博 / 社交平台,或其他去中心化互操作服务,主打 “联邦宇宙”(fediverse)互操作能力。

Fedify URL验证安全绕过漏洞CVE-2026-50131

Fedify 用于构建基于ActivityPub联邦服务器应用,在运行时获取远程文档和媒体资源时会调用validatePublicUrl()进行URL合法性验证。

栋科技漏洞库关注到 Fedify 多个版本中存在的 URL 验证安全绕过漏洞,该漏洞现已被追踪为CVE-2026-50131,CVSS 3.X评分为8.6。

二、漏洞分析

Fedify 此前曾针对服务器端请求伪造(SSRF)及内网访问问题进行修复,在拉取运行时文档与媒体资源前新增了公网 URL 校验逻辑。

但目前的 IPv4 地址校验规则存在缺陷,validatePublicUrl() 函数依靠 isValidPublicIPv4Address() 函数来拦截非公网 IPv4 地址。

该函数虽然已经屏蔽了常见私有地址、本地地址段,包括 10.0.0.0/8、127.0.0.0/8、169.254.0.0/16、172.16.0.0/12、192.168.0.0/16,

但未拦截100.64.0.0/10共享地址空间、198.18.0.0/15基准测试地址、224.0.0.0/4多播地址、240.0.0.0/4保留地址等特殊用途IPv4范围。

而是仍将多个专用地址段、保留地址段、组播地址段、基准测试地址段及运营商级 NAT 地址段判定为合法公网地址。

由于该校验机制用于对外请求前的 SSRF 防护,因此此次被发现的安全漏洞仍然归属于原有 SSRF 漏洞修复不彻,可被绕过。

导致攻击者可通过构造包含这些地址的URL绕过SSRF防护访问内部网络资源。

(一)与 GHSA-p9cg-vqcc-grcx 非重复漏洞说明

1、GHSA-p9cg-vqcc-grcx 对应的原始问题为:

Fedify 拉取 ActivityPub 相关对象、动态内容、文档及媒体链接时,未校验目标地址是否为公网地址。

本报告聚焦修复后的校验逻辑:

当前防护流程虽已增加公网 URL/IP 校验,但 IPv4 地址归类规则不完善,依旧把部分专用地址段识别为公网地址。

因此该问题属于原有 SSRF 防护措施修复不彻底、存在绕过风险,并非重复上报原始漏洞。

该异常行为存在于已完成漏洞修复的现行代码分支中,并非仅出现在原始安全公告标注的受影响版本里。

2、受影响代码

(1)受影响文件:

packages/vocab-runtime/src/url.ts

(2)现行 IPv4 校验逻辑:

export function isValidPublicIPv4Address(address: string): boolean {
  const parts = address.split(".");
  const first = parseInt(parts[0]);
  if (first === 0 || first === 10 || first === 127) return false;
  const second = parseInt(parts[1]);
  if (first === 169 && second === 254) return false;
  if (first === 172 && second >= 16 && second <= 31) return false;
  if (first === 192 && second === 168) return false;
  return true;
}

(二)重点说明

核心在于防护逻辑本身存在绕过漏洞:用于判断目标地址是否为公网地址的函数,会将无法在公网路由的地址段判定为合法公网地址。

三、POC概念验证

1、使用同款校验逻辑复现了该 IPv4 地址校验异常行为:

管理员已设置登录后刷新可查看

实际输出结果:

8.8.8.8 => true
127.0.0.1 => false
10.0.0.1 => false
192.168.1.1 => false
169.254.169.254 => false
100.64.0.1 => true
198.18.0.1 => true
224.0.0.1 => true
240.0.0.1 => true
192.0.0.1 => true
192.0.2.1 => true
198.51.100.1 => true
203.0.113.1 => true

校验器可正确拦截部分常见私有地址与本地地址段,但错误放行了多个专用地址段。

2、不正确允许的范围示例

重要示例包括:

100.64.0.0/10 Carrier-grade NAT
198.18.0.0/15 Benchmarking / internal testing networks
224.0.0.0/4 Multicast
240.0.0.0/4 Reserved
192.0.0.0/24 IETF protocol assignments

其他正确性示例:

192.0.2.0/24 Documentation range
198.51.100.0/24 Documentation range
203.0.113.0/24 Documentation range

3、安全影响

Fedify 中所有接收、处理远程 ActivityPub 对象、动态内容、文档及媒体链接,且依赖 validatePublicUrl() 作为 SSRF 防护边界的功能,

均可能错误允许服务端向本应不属于公网资源的 IPv4 专用地址段发起请求。

结合部署环境与网络路由规则,可通过构造恶意ActivityPub对象或媒体链接,诱导 Fedify 服务器向非公网、专用网络地址段发起请求。

该问题属于此前 SSRF 及内网访问漏洞(GHSA-p9cg-vqcc-grcx)**修复不彻底、可被绕过**的衍生风险。

4、修复建议

对公网 IP 进行校验时,摒弃精简的手动黑名单机制,改为校验解析后的地址是否为全球可路由的公网地址。

最低修复要求:IPv4 校验逻辑需拦截所有相关专用地址段,具体包括:

0.0.0.0/8
10.0.0.0/8
100.64.0.0/10
127.0.0.0/8
169.254.0.0/16
172.16.0.0/12
192.0.0.0/24
192.0.2.0/24
192.168.0.0/16
198.18.0.0/15
198.51.100.0/24
203.0.113.0/24
224.0.0.0/4
240.0.0.0/4

4、长期优化方案

更稳妥的长效修复方案:使用持续维护的IP地址分类库,这类库原生支持安全场景下的公网/全局路由地址校验。

5、修复思路

export function isValidPublicIPv4Address(address: string): boolean {
  const parts = address.split(".").map((part) => parseInt(part, 10));

  if (
    parts.length !== 4 ||
    parts.some((part) => Number.isNaN(part) || part < 0 || part > 255)
  ) {
    return false;
  }

  const [a, b] = parts;

  if (a === 0) return false;
  if (a === 10) return false;
  if (a === 100 && b >= 64 && b <= 127) return false;
  if (a === 127) return false;
  if (a === 169 && b === 254) return false;
  if (a === 172 && b >= 16 && b <= 31) return false;
  if (a === 192 && b === 0) return false;
  if (a === 192 && b === 168) return false;
  if (a === 198 && (b === 18 || b === 19)) return false;
  if (a === 198 && b === 51) return false;
  if (a === 203 && b === 0) return false;
  if (a >= 224) return false;

  return true;
}

四、影响范围

fedify/fedify(npm) ≥ 0.11.2,≤ 2.2.3

fedify/fedify(JSR)≥ 0.11.2,≤2.2.3

fedify/vocab-runtime(npm)≤ 2.2.3

fedify/vocab-runtime(JSR)≤2.2.3

五、修复建议

fedify/fedify(npm)1.9.12, 1.10.11, 2.0.19, 2.1.15, 2.2.4

fedify/fedify(JSR)1.9.12, 1.10.11, 2.0.19, 2.1.15, 2.2.4

fedify/vocab-runtime(npm)2.0.19, 2.1.15, 2.2.4

fedify/vocab-runtime(JSR)2.0.19, 2.1.15, 2.2.4

六、参考链接

管理员已设置登录后刷新可查看



扫描二维码,在手机上阅读
评论
更换验证码
友情链接