Reflex框架Open Redirect漏洞技术分析

本文详细分析了reflex-dev/reflex框架中存在的开放重定向漏洞(CVE-2025-62379),包括漏洞成因、攻击原理、PoC验证方法和安全影响,涉及代码空间环境检测和客户端重定向验证缺失等技术细节。

Reflex框架Open Redirect漏洞技术分析

漏洞详情

包管理器: pip
受影响包: reflex (pip)
受影响版本: >= 0.5.4, <= 0.8.14
已修复版本: 无

漏洞描述

缓解措施

确保在生产环境中未设置 GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN 环境变量。正确的做法如下:

1
assert os.getenv("GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN") is None

漏洞概述

当在GitHub Codespaces环境中加载 GET /auth-codespace 页面时,该页面会自动将 redirect_to 查询参数值直接分配给客户端链接,而不进行任何验证,并触发自动点击。这允许攻击者将用户重定向到任意外部URL。

该路由仅在检测到Codespaces环境时注册,而检测由环境变量控制。这意味着如果设置了相应的环境变量,相同的行为可以在生产环境中被激活。

漏洞代码分析

https://github.com/reflex-dev/reflex/blob/51f9f2c2f52cac4d66c07683a12bc0237311b6be/reflex/utils/codespaces.py#L18-L46

此代码将 redirect_to 查询参数直接分配给 a.href,而不进行任何验证,并立即触发点击(自动导航),允许将用户发送到任意外部域,导致开放重定向漏洞。

执行条件仅基于 sessionStorage 标志的存在,这意味着它在首次访问或在隐身/隐私浏览窗口中立即触发,没有服务器端源/方案白名单或内部路径强制执行防御措施。

PoC验证

PoC描述

使用docker-example中的生产配置(docker-example/production-compose)。
在compose.yaml的应用容器中添加Codespaces检测环境变量以强制暴露路由:

1
GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN: dummy

反向代理(Caddy)需要配置为将 /auth-codespace 转发到后端(根据环境要求)。

curl示例

1
https://localhost/auth-codespace?redirect_to=http://google.com

PoC MP4

https://file.notion.so/f/f/d105d145-04bc-45c5-b46c-ed880895e9de/a86c3e3b-f67f-45d1-8fa2-4aa0ba7d0068/poc.mp4?table=block&id=26955717-5d2e-805a-b53c-e25ee03f1d4b&spaceId=d105d145-04bc-45c5-b46c-ed880895e9de&expirationTimestamp=1760508000000&signature=ZPp8PVldfGOh0gB5tVElRV6GN789R-EG0oxZgkFjjLU&downloadName=poc.mp4

影响

网络钓鱼/社会工程攻击

攻击者可以利用用户对受信任域的信任,立即将用户从受信任域重定向到外部恶意站点。这支持登录页面欺骗、凭据收集和重定向到恶意软件分发页面。

认证/会话流程中断

当具有相同源的有效会话/cookie的用户点击链接时,他们会被重定向到意外的外部域,这可能绕过或破坏认证/授权流程。当与基于重定向的流程(如OAuth/OIDC)结合使用时,这可能升级为安全事件。

参考链接

安全评分

CVSS总体评分: 3.1/10 (低危)

CVSS v3基础指标:

  • 攻击向量: 网络
  • 攻击复杂度: 高
  • 所需权限: 无
  • 用户交互: 需要
  • 范围: 未改变
  • 机密性: 无影响
  • 完整性: 低影响
  • 可用性: 无影响

EPSS评分: 0.038% (第11百分位)

弱点分类

弱点: CWE-601
描述: URL重定向到不受信任的站点(‘开放重定向’)
Web应用程序接受用户控制的输入,该输入指定指向外部站点的链接,并在重定向中使用该链接。这简化了网络钓鱼攻击。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计