别问,问就是我差点在所有浏览器中注入 JavaScript 代码

  • A+
所属分类:安全文章

别问,问就是我差点在所有浏览器中注入 JavaScript 代码 聚焦源代码安全,网罗国内外最新资讯!


专栏·供应链安全

数字化时代,软件无处不在。软件如同社会中的“虚拟人”,已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为当今社会的根本性、基础性问题。


随着软件产业的快速发展,软件供应链也越发复杂多元,复杂的软件供应链会引入一系列的安全问题,导致信息系统的整体安全防护难度越来越大。近年来,针对软件供应链的安全攻击事件一直呈快速增长态势,造成的危害也越来越严重。


为此,我们推出“供应链安全”栏目。本栏目汇聚供应链安全资讯,分析供应链安全风险,提供缓解建议,为供应链安全保驾护航。


注:以往发布的部分供应链安全相关内容,请见文末“推荐阅读”部分。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码
  


这是一个关于网站上 Bootstrap 实现失败如何让我获得在拥有数千用户的浏览器中执行 JavaScript 代码的故事。故事比较长,大家搬好小板凳。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码


别问,问就是我差点在所有浏览器中注入 JavaScript 代码
别问,问就是我差点在所有浏览器中注入 JavaScript 代码
我如何发现漏洞?


在正式开讲之前,我先来解释下我是怎么发现这个漏洞的。我目前正在开发在多种互联网 Web 服务上获得持久 XSS(跨站点脚本)的新型机会主义方法。这种方法论由如下部分组成:

1. 使用自定义 Web 爬虫爬取互联网上的蜘蛛 Web 服务并爬取源代码。它通过 IP 地址迭代并为每个 IP 地址点击 web-root 内容。

2. 接着识别哪些网站使用了外部托管的 JavaScript。每台服务器通过如下方法来实现这种识别目的:

  • 审计 HTML 源代码中的 <script> 标记的源 (src) 值中是否包含一个完整的 web 地址(而非本地地址)。例如:<script type='text/javascript' src='https://domain.name/path/to/hosted/javascript.js'></script>。

  • 同时确保 <script> src 值不仅指向托管该网站的同样的服务器。为此,我通过检查 HTTPS 证书中的主机值获得服务器名称,并和 <script> 标记中的主机名称进行交叉验证,确保该网站托管的 JavaScript 位于不同于目标网站的服务器上。

3. 如果该 JavaScript 确认在外部托管,则该脚本执行 name-registrar 服务的 API 请求,判断 <script> 标记中的域名是否可购买。

4. 如域名可用,则触发警告,表明可在web-service 中注入 JavaScript。

5. 检查域名成本并审计该 web-service,判断该网站的流量情况。如存在大规模利用的足够机会且域名成本可承担,则购买该域名。

6.  设立 web 服务器,为新域名创建 DNS A 记录,该新域名和易受攻击站点中的 <script> 标记 src 值的子域名匹配。

7. 现在可以在所有浏览器中注入 JavaScript!!!


别问,问就是我差点在所有浏览器中注入 JavaScript 代码
别问,问就是我差点在所有浏览器中注入 JavaScript 代码
案例:你的 boot 在哪里?


在某些情况下,这种方法只会返回被弃用的博客或其它流量少的网站,这种情况的投资比非常低。然而,在另外一些情况下,通过这种方法可以找到在用户数达数千名的浏览器中注入 JavaScript的机会。我最近就发现了这样一个案例。在扫描过程中我收到了关于 iht.edu.in 的警报信息。我快速审计该网站后发现它为印度学术机构园艺技术研究所 (IHT) 所有。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码

查看源代码后我确认了该缺陷的存在,并发现 IHT 网站 (iht.edu.in) 的一个 <script> 标记指向 maxcdn.strapcdn.com。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码

接触过前端开发的人(尤其是 Bootstrap 经验)都会明白它意味着什么。开发人员打算从 Bootstrap 框架(托管在 maxcdn.bootstrapcdn.com)中拉取 JavaScript 代码,但不慎忘记 “bootstrapcdn” 域名中的 “boot”。由于源代码中这一行代码的存在,任何人浏览 iht.edu.in 网站时,浏览器都会试图从位于 strapcdn.com 域名上的主机 (maxcdn) 中检索外部 .js (JavaScript) 文件。问题是,strapcdn.com 域名不为任何人所注册或所有。这说明两件事。

1、 脚本标记并未做出任何动作,因为它指向的是不存在的源。

2、 更重要的是,该域名可被任意注册,之后用于在网站上下文内向所有网站用户推送恶意 JavaScript。

我登录到名称注册商 (NameCheap) 后确认该域名是可用的,而我只需7.98美元即可购买。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码

所有证据均表明它可能是一个流量大的网站。该网站看似精良专业。而且快速进行了一些研究后我发现 IHT 是一家大型机构,建立于2009年,校园有150公顷以及很多卫星校区。于是,我购买了该域名。


别问,问就是我差点在所有浏览器中注入 JavaScript 代码
别问,问就是我差点在所有浏览器中注入 JavaScript 代码
作为研究员,我是这么做的


完全是出于被动评估风险,我设置了一个 Apache web服务器并创建 DNS A 记录将服务器和 IHT 网站源代码中引用的子域名关联起来。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码

之后被动地监控来自 iht.edu.in 域名的进站连接。就在服务器建立好后,就马上有了连接。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码

在正常情况下,我会立即发布这类漏洞。然而鉴于该漏洞的性质,我购买域名后,其他人不可能进行利用(起码是我所拥有的下一年内)。于是我决定等待并做更多的研究,量化它的潜在影响。我让它运行了2周的时间(3月12日至3月26日),而且在这段时间内我从访问 iht.edu.in 网站的1454个不同的唯一IP 地址中收到了 JavaScript 请求。这是很多受陷浏览器会话啊!!!

别问,问就是我差点在所有浏览器中注入 JavaScript 代码

评估了两周后,我给能找到的唯一一个 IHT 联系信箱发了邮件,告知该问题。


别问,问就是我差点在所有浏览器中注入 JavaScript 代码
别问,问就是我差点在所有浏览器中注入 JavaScript 代码
其实,我本可以……


虽然我无意真的将任何 JavaScript 注入这类机构,但我确实认为访问站点并研究 JavaScript 控制台来探究可能性的实践是值得的。

很显然,第一种选择是涂鸦网站。于是我通过最爱的 JavaScript 涂鸦代码,让所有内容都变成斜着的并强制网站访问者只能转动自己的计算机才能注册。

{var e=document.body.getElementsByTagName("*");for(i=0;i<e.length;i++){var t=Math.floor(10*Math.random()+1);e[i].style.transform="rotate("+t+"deg)"}};


别问,问就是我差点在所有浏览器中注入 JavaScript 代码

显然我没有该网站的访问账户,从后认证角度来审计它的行为。但发布快速警报(document.cookie)命令后,似乎该网站并没有在 cookie 上使用 HTTPOnly 标记的习惯。

别问,问就是我差点在所有浏览器中注入 JavaScript 代码

这意味着JavaScript 极有可能被用于收割用户的会话令牌,方法对 document.cookie 输出进行编码,之后执行我所控制的服务器的后台 web 请求。我们可从恶意服务器日志中检索用户会话令牌,之后劫持用户会话并访问用户账户。


别问,问就是我差点在所有浏览器中注入 JavaScript 代码
别问,问就是我差点在所有浏览器中注入 JavaScript 代码
所获经验


那么,我们从中可获得哪些经验教训?

  • 检查源代码——网站源代码中的输入错误很重要,可造成严重后果。仔细检查源代码,喝点咖啡稍事休息,然后再检查一遍!!!

  • 使用 HTTPOnly —— 即使有人设法在用户浏览器中执行代码,但使用 HTTPOnly 防护功能的 cookie 会保护用户账户安全。因此,切记保护好自己的 cookie!






推荐阅读

详细分析PHP源代码后门事件及其供应链安全启示
微软“照片”应用Raw 格式图像编码器漏洞 (CVE-2021-24091)的技术分析
速修复!热门npm 库 netmask 被曝严重的软件供应链漏洞,已存在9年
SolarWinds 供应链事件后,美国考虑实施软件安全评级和标准机制
找到软件供应链的薄弱链条
GitHub谈软件供应链安全及其重要性
揭秘新的供应链攻击:一研究员靠它成功入侵微软、苹果等 35 家科技公司
谷歌Linux基金会等联合推出开源软件签名服务 sigstore,提振软件供应链安全
Linus Torvalds 警告:勿用 Linux 5.12 rc1,担心供应链攻击?
微软和火眼又分别发现SolarWinds 供应链攻击的新后门
找到恶意软件包:Go 语言生态系统中的供应链攻击是怎样的?
拜登签署行政令,要求保护美国关键供应链(含信息技术)的安全
坐火车太无聊,我溜入微软 VS Code官方GitHub仓库,但没敢发动供应链攻击
SolarWinds 供应链攻击中的第四款恶意软件及其它动态
OpenWRT开源项目论坛遭未授权访问,可被用于供应链攻击
FireEye事件新动态:APT 攻击 SolarWinds 全球供应链(详解)
FireEye 红队失窃工具大揭秘之:分析复现SolarWinds RCE 0day (CVE-2020-10148)
FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)
FireEye 红队失窃工具大揭秘之:分析复现 Zoho 任意文件上传漏洞(CVE-2020-8394)
FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)
FireEye 红队失窃工具大揭秘之:分析复现 Atlassian RCE (CVE-2019-11580)
Ripple 20:严重漏洞影响全球数十亿IoT设备,复杂软件供应链使修复难上加难
被后爹坑:开源 JavaScript 库沦为摇钱树
速修复!开源企业自动化软件 Apache OFBiz 出现严重的 RCE 漏洞
谷歌提出治理开源软件漏洞的新框架:知悉、预防、修复
开源软件漏洞安全风险分析
开源OS FreeBSD 中 ftpd chroot 本地提权漏洞 (CVE-2020-7468) 的技术分析
集结30+漏洞 exploit,Gitpaste-12 蠕虫影响 Linux 和开源组件等


原文链接

https://www.sociosploit.com/2021/03/bootstrap-fail-persistent-xss-via.html


题图:Pixabay License


本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。



别问,问就是我差点在所有浏览器中注入 JavaScript 代码
别问,问就是我差点在所有浏览器中注入 JavaScript 代码

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

   别问,问就是我差点在所有浏览器中注入 JavaScript 代码 觉得不错,就点个 “在看” 或 "” 吧~


本文始发于微信公众号(代码卫士):别问,问就是我差点在所有浏览器中注入 JavaScript 代码

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: