RSS 阅读器 yarr 的 iframe 白名单被 URL 解析歧义绕过
来源:0x67673068.me — 2026-10-20
📋 概述
yarr 是用 Go 写的开源 RSS 阅读器。作者读源码时发现,每条 feed 里的文章都被当作 item 处理,内容先过 Sanitize 再以 JSON 返回、动态渲染进 DOM——只要净化逻辑有缝,就是 XSS。缝在 iframe 的 src 校验上:isValidIframeSource 用 net/url 取出 host 与白名单比对,而浏览器把 javascript://www.youtube.com/%0a<任意JS> 当作 JS URI 执行,net/url 却认为 authority 就是 www.youtube.com。加上默认的宽松 sandbox,一个 RSS 源就能对任何打开该条目的用户执行脚本。
🔑 核心要点
- 攻击面在净化器:内容先 sanitize 再塞进 DOM,绕过即 XSS。
- 允许标签里包含 iframe:白名单里有 iframe 且 src 是允许属性。
- 核心漏洞是解析歧义:net/url 看到的 host 与浏览器理解的是两回事。
- payload 很精巧:javascript://www.youtube.com/%0a 后面接任意 JS。
- sandbox 反而帮了忙:默认 allow-scripts 与 allow-same-origin 让脚本能改父页面 DOM。
- 处置情况:已通知维护者但没收到回应,作者判断实际影响有限。
💡 金句
Putting it all together, an RSS feed can XSS any yarr user who loads their post
👍 0
👎 0
← 返回 Lobsters 首页