价值$1,000的XSS
原文链接: https://mp.weixin.qq.com/s?__biz=MzkxNjc0ODA3NQ==&mid=2247484066&idx=1&sn=5c9910abf2a67f9117534589da58fd10
价值$1,000的XSS
原创 漏洞集萃 漏洞集萃 2025-07-14 01:12
重要声明
本公众号内容仅限技术交流与学习研究,旨在提升网络安全认知。
严禁用于任何非法用途!因滥用信息造成的任何后果,由使用者自负,与本公众号无关。
文中所述观点、提及公司或技术仅为客观引用,不代表本公众号立场。
引言
安全研究员 nishimunea 通过一次巧妙的漏洞利用,针对 Brave 浏览器的阅读模式 (Reader Mode) 发现了一个跨站脚本攻击 (XSS) 漏洞,并因此获得了 1000 美元的赏金。该漏洞利用了
%READER-TITLE-NONCE%
的一个模板技巧,成功绕过了 Brave 浏览器的内容安全策略 (CSP)。漏洞的关键在于:Brave 的阅读模式错误地信任了来自 meta 标签的 HTML 内容,并且在渲染简化页面时未能对注入的脚本进行转义。
这个 XSS 不仅在
localhost
源的页面 (
http://localhost:6571
) 上实现了脚本执行,还允许攻击者访问并窃取经过阅读模式处理的跨域页面中的特权数据。
漏洞摘要
Brave 浏览器的阅读模式通过在一个本地源下以简约布局渲染文章来简化阅读体验:
ounter(line
http://localhost:6571/reader-mode?uri=...&uuidkey=...
为了加强安全性,Brave 要求内联脚本必须使用 CSP nonce —— 但最近一次 CSP 策略的放宽(通过一次代码提交)允许了使用动态注入的
%READER-TITLE-NONCE%
的内联脚本。这个值由 Brave 在渲染时插入到 HTML 模板中。
不幸的是,模板中还使用了另一个占位符
%READER-CREDITS%
,它会直接被
<meta name="author">
标签的值替换 —— 并且没有对 HTML 内容进行转义。
漏洞利用剖析
- 攻击者在一个网页中嵌入了如下恶意的
<meta>
标签:
<meta name="author" content="Evil <script nonce=%READER-TITLE-NONCE%>alert(document.location);</script>!--">
-
-
当 Brave 用户在该页面上激活阅读模式时:
%READER-CREDITS%
会被替换为未经转义的 meta author 值。
%READER-TITLE-NONCE%
会被替换为一个有效的脚本 nonce。
- 结果
:一个完全符合 CSP 要求的
<script>
标签被渲染并执行。
- 该 XSS 在 Brave 的
localhost
源下触发,允许脚本执行以下操作:
-
通过滥用 iframe 窃取经过阅读模式处理的跨域页面内容。
-
从 URL 中提取
uuidkey
,并可能访问具有特权的会话视图。
影响
- 在
localhost
下的阅读模式视图中存在存储型 XSS。
-
利用动态 nonce 绕过了严格的 CSP 策略。
-
可以从任何在阅读模式下渲染的页面中窃取跨域数据。
-
利用窃取的
uuidkey
值访问 Brave 的特权 URL。
受影响版本
Brave iOS 1.31.1 及以上版本,包括当时最新的 Nightly 构建版本。
复现步骤
-
访问攻击者控制的演示页面:Bad WebsiteThis document defines a new HTTP header that allows web host operators to instruct user agents to remember (“pin”) the… csrf.jp
-
从 Brave 浏览器的地址栏启用阅读模式。
-
由于载荷 (payload) 使用了有效的 nonce 进行渲染,
alert
将会执行。
根本原因
- 来自
<meta name="author">
的 HTML 内容通过
%READER-CREDITS%
未经转义地渲染到阅读模式的 HTML 中。
- Brave 使用
%READER-TITLE-NONCE%
注入了一个有效的 CSP nonce。
- 这两者结合导致了符合 CSP 规范的可执行脚本标签的产生。
修复措施
-
对通过模板占位符注入的任何 HTML 内容进行转义。
-
对在简化渲染模式中使用的 meta 标签值进行清理。
-
避免允许
%READER-TITLE-NONCE%
出现在用户可控的内容中。
觉得本文内容对您有启发或帮助?
点个关注➕
,获取更多深度分析与前沿资讯!
====本文结束====
以上内容由漏洞集萃翻译整理。
参考:
https://medium.com/meetcyber/1-000-bounty-readermode-xss-in-brave-via-reader-title-nonce-4204606dfe20