abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · ats-redirect-zero-net
类别: SSRF 可达性: 远程
Apache Traffic Server 10.2.0 (b1df7334) - Apache Software Foundation
redirect.actions 默认的 routable:follow 将 0.0.0.0/8(INADDR_ANY 除外)归类为 FOLLOW。回环地址仅为 127.0.0.0/8 和 ::1。默认的 CONNECT 目标拒绝和 ESI IncludeUrlValidator 已经拒绝 0.0.0.0/8。跟随重定向重新打开了它。
默认 number_of_redirections 为 0,因此在开启 follow 之前不会评估该映射。即使计数器为 0,调用 TSHttpTxnRedirectUrlSet 的已加载插件仍会强制进行一次跳转(CVE-2026-58189 计数器重置已关闭)。
| ID | 暂无 CVE |
| 类别 | SSRF(跟随重定向遗漏 0.0.0.0/8) |
| 可达性 | 远程(开启 follow 后由源站 Location 触发) |
| CWE | CWE-918 |
| CVSS | 高危:8.6 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N |
| 产品 | Apache Traffic Server |
| 受影响 | 10.2.0 (b1df7334b39a878971c376da849e8da4984918b6) redirect.actions routable 填充 |
| 认证 | 无。必须开启 follow(实验中 number_of_redirections=1)。 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1:18790 |
我固定了公开标签 10.2.0 的 peel 提交 b1df7334。实验环境是一个在回环上源码构建的 ats-10.2.0-lab:local 反向代理。回环 RETURN。0.0.0.0 400。0.0.0.1 FOLLOW。跟随跳转时跳过 Remap。
让 ATS 在 number_of_redirections=1 之后(或在插件 TSHttpTxnRedirectUrlSet 之后)跟随 Location: http://0.0.0.1/。在 Linux 上,0.0.0.1 是本机地址。
| 方法 | 汇聚点 | 权限 |
|---|---|---|
未认证 GET;源站 302 Location: http://0.0.0.1:18080/w 且 number_of_redirections=1 | parse_redirect_actions ROUTABLE 填充(HttpConfig.cc:1782-1787);OSDNSLookup 动作映射 | 侦察 / SSRF(实验已证实): ATS 以 ROUTABLE 跟随。客户端响应体 ATS-REDIRECT-ZERO-NET-WITNESS。跟随跳转时跳过 Remap。 |
同一跳转;复制 Authorization / Cookie | HttpSM::redirect_request | 完整性(推断): 这些头在跟随跳转时未被剥离。未作为写入操作进行验证。 |
IPv4 映射 ::ffff:0:0/96 | ::/0 的相同填充 | 侦察(推断): CONNECT 目标拒绝的同类问题。未进行验证。 |
实验已证实 vs 推断: 跟随 0.0.0.1、回环 RETURN、routable FOLLOW、INADDR_ANY 400 均为实验证实。IPv4 映射和凭据转发为推断。
前提条件: redirect.actions 为 routable:follow(编译默认值)且 number_of_redirections > 0,或存在设置重定向 URL 的插件。默认计数器为 0。
| 攻击面 | 实验环境 |
|---|---|
回环 127.0.0.1 | RETURN。客户端从未看到 LOOPBACK-ONLY-SECRET。保持 302。 |
0.0.0.0 INADDR_ANY | 在动作映射之前返回 400 |
默认 number_of_redirections=0 | routable:follow 未被评估 |
RFC1918 / CGNAT / 链路本地 / ::1 | 通过 DEFAULT 填充 RETURN |
CONNECT 目标拒绝 0.0.0.0/8 | 已在默认 ip_allow.yaml 中 |
ESI include 验证器 0.0.0.0/8 | 已私有(CVE-2026-58178) |
| 插件重定向计数器重置 | 已关闭(CVE-2026-58189) |
不是 CVE-2026-58189。也不是 CVE-2026-58178。那些范围是在 CONNECT 和 ESI 上命名的。Follow-redirect 没有获得它们。
python3 ats-redirect-zero-net-Abraxas-Labs.py
或
cd lab
./run.sh
回环地址 127.0.0.1:18790。Compose 项目 ats-redirect-zero-net。镜像 ats-10.2.0-lab:local。见证值 ATS-REDIRECT-ZERO-NET-WITNESS。最后一行:
SUCCESS ats-redirect-zero-net follow-0.0.0.1=yes loopback-return=yes routable-follow=yes inaddr-any=400 remap_required=1 ATS-REDIRECT-ZERO-NET-WITNESS
像默认 CONNECT 目标拒绝和 ESI IncludeUrlValidator 已经做的那样,将 0.0.0.0/8 和 IPv4 映射的 ::ffff:0:0/96 标记为相同处理。回环地址不仅仅是 127/8。仅靠 ats_is_ip_any 拒绝 0.0.0.0 是不够的。
在此之前,请将 number_of_redirections 保持为 0,或设置 redirect.actions 使可路由地址为 RETURN。插件 TSHttpTxnRedirectUrlSet 仍会强制进行一次跳转。
b1df7334b39a878971c376da849e8da4984918b6)src/proxy/http/HttpConfig.cc parse_redirect_actionssrc/records/RecordsConfig.cc number_of_redirections / redirect.actionssrc/api/InkAPI.cc TSHttpTxnRedirectUrlSet 单次跳转递增configs/ip_allow.yaml.defaultIncludeUrlValidator 0.0.0.0/8 私有(CVE-2026-58178)