如何骇入 Apple, Microsoft 等大公司? (转)
原始文章:
https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610
作者一直对这行指令感兴趣
pip install package_name
大部分的人不管在 pip(python) 或 npm (node) 安装套件,基本上都是相信发布者的
那如果有人恶意利用信任呢?
没有一个套件托管服务可以保证它托管的套件都是没后门的 (malware-free)
在之前的研究,对于这类的漏洞通常是基于知名套件,新增一个 typo 版本等等
The Idea
作者在 github 上发现了 Paypal 的一个 package.json 档案
https://i.imgur.com/DckciS2.png
看得出来这个档案同时含有 public 与 private packages
应该是被内部的 registry hosted
所以一个假设来了:
如果在 public registry 去上传恶意程式,并使用这些 private package name
Paypal 内部默认会不会使用在 public 的这些套件呢?
可能是 developer 或 CICD System 都可能默认使用 public registry 的套件
然后,作者发现 npm 允许在安装套件时执行任意程式码
因此作者在 preinstall script 写了些程式去取得一些主机资料
ps. 作者其实是想跟目标公司提供这些漏洞赚奖金为前提,
取得一些内部主机资料证明有骇入
然而一般大公司资安严密,怎么会那么容易让你把资料往外送呢?
作者利用了 DNS protocal,把偷到的主机资讯夹在 DNS query 上,
该 DNS query 直接或间接通过 intermediate resolvers
到达了自架的 authoritative name server
计画大概是这样
接下来就是如何知道内部的 private package name
除了从 github 找一些没处理好的 config 外
其实从 js 中最容易发现 (从一些公司公开的网址)
package.json 通常会随着 build,把一些相依定义包入 js 中
https://i.imgur.com/Nj6P3j5.png
然后作者就开始把这些"测试套件"依照这些 private package name
上传到 public registry
然后各大公司就.....轻易被骇入了
后续作者有得到奖金,并讲很多后续,有兴趣的再到原文续读
原文: https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610