# 漏洞总结:Stored HTML Injection in Contact Email via nl2br() + Unescaped Blade Template ## 漏洞概述 - **漏洞类型**:存储型 HTML 注入(Stored HTML Injection) - **触发点**:联系表单(POST /contact),无需认证 - **根本原因**: - 用户输入的文本通过 PHP 的 `nl2br()` 函数处理(仅转换换行为 ``,不转义 HTML) - 结果被直接嵌入到 Blade 模板中,使用未转义的 `{{ $msg }}` 指令(而非 `{{{ $msg }}}`) - 管理员收到邮件后,在支持 HTML 的客户端(如 Gmail)中打开时,恶意 HTML 被渲染执行 ## 影响范围 - **受影响版本**:BraveCMS-2.0 (PHP) - **严重程度**:CVSS v3 基础得分 7.1 / 10(高危) - **攻击向量**:网络远程 - **权限要求**:无(无需认证) - **用户交互**:需要(管理员必须打开邮件并点击链接/输入凭证) - **影响**: - 可注入伪造的登录表单、安全警告等 - 导致凭证窃取或重定向至攻击者控制的站点 - 无直接代码执行,但存在社会工程学风险 ## 修复方案 1. 在模板中使用三重花括号 `{{{ $msg }}}` 替代 `{{ $msg }}` 以自动转义 HTML 2. 对输入进行服务端 HTML 净化(如使用过滤库) 3. 避免在邮件中渲染用户可控的 HTML 内容 ## POC 代码 / 利用代码 ```html Security Alert Your session has expired. Please re-authenticate: Login ``` ## 修复示例代码(ContactController.php) ```php // ContactController.php $msg = nl2br(e($request->message)); // e() 会编码 nl2br 添加的 标签 ``` ```blade {{-- email template --}} {{ $msg }} ```