NPM 仓库中多个周下载量超千万的热门组件被投毒,这些组件均为 qix 开发者发布,可能由于其凭证泄漏导致账号被窃取。
昨晚睡前就在 x 上看到各种信息了:
受影响投毒组件被植入恶意的混淆代码 index.js 文件,该恶意代码会劫持浏览器钱包(如 MetaMask )和网络请求( fetch 和 XMLHttpRequest ),拦截 ETH 、BTC 、SOL 、TRX 等加密货币交易,通过替换目标地址将资金转移至攻击者钱包(如 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976 )
混淆后的恶意代码 index.js:
攻击非常有针对性,是针对 web3 相关用户的大规模攻击.这个 javascript payload 不复杂,使用了 obfuscator.io 或者类似的工具。
这个开发者账号泄密的原因是因为被钓鱼邮件迷惑了,点击了邮件里面的链接,但未验证链接属于正确的官方发布的地址。
目前 VirusTotal 仍无法检测异常。
自检:
brew install rg
rg -uu --max-columns=80 --glob '*.js' _0x112fa8
参考 hacker news: https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised
提醒,以后这种邮件里面的 login ,如果有 pasaword 管理工具,可以自动对比域名,不对的域名不会显示自动填充的下拉框的! v 友还有啥 tips ,都可以提一下,这些依赖用的人太多了!
![]() |
1
kitty7030 11 小时 19 分钟前
浏览器钱包 这么容易被劫持吗
|
2
kyokaka 11 小时 15 分钟前
针对开发者的钓鱼和水坑攻击效率太高了
|
3
Mithril 11 小时 10 分钟前
|
![]() |
4
ybz 11 小时 8 分钟前
这种投毒相当于人家直接在你程序里面写代码了,再加上 js 方法属性随便替换的,劫持可太容易了。
|
5
stinkytofux 11 小时 6 分钟前 ![]() @kitty7030 #1 浏览器插件是我比较担心的地方, 我不确定是不是真的能被劫持, 尤其是 Bitwarden 插件, 上面记录的不仅仅有密码, 还有我的各种命根子.
|
![]() |
6
belin520 11 小时 4 分钟前
扫码登录
|
![]() |
7
lisongeee 11 小时 3 分钟前 ![]() 《这个开发者账号泄密的原因是因为被钓鱼邮件迷惑了,点击了邮件里面的链接》
点进链接也没事,肯定是点击链接之后再输入了密码之类 |
![]() |
10
crocoBaby 10 小时 43 分钟前
又学到一个财务自由小技巧
|
11
Meteora626 10 小时 40 分钟前
@kitty7030 我的小狐狸钱包啥都没干,电脑上都没助记词 0 。3eth 不知道咋就没了
|
![]() |
12
jaff 10 小时 39 分钟前
使用 JS 生态来开发原生应用就是个笑话啊,这应该不是第一次了。
|
![]() |
13
MyBules 10 小时 32 分钟前 ![]() 这个攻击手段,像我之前遇到的粘贴板病毒,也是替换目标钱包地址。https://joessem.com/archives/paste-virus.html
|
![]() |
14
deepbytes OP ![]() |
![]() |
16
newaccount 10 小时 21 分钟前 ![]() 想把这转给公司的傻逼经理们看看
时不时想让人解决钓鱼邮件的问题 我特么要是能解决的了还在这受你这份憋屈气! |
![]() |
17
deepbytes OP Stay safe:
✓ Verify recipient/amount on wallet screen ✓ Check if addresses change after pasting ✓ Review recent transactions ✓ Use hardware wallets for high-value ops 以上,共勉! web3 迷雾重重,佬们护好钱袋子! |
18
dcsuibian 10 小时 17 分钟前 ![]() 所以说 npm 实在是垃圾中的垃圾
看看谁都踩一脚的 Java 。Maven 的设计实在是好了不止一个次元。maven central 发布包要审核,不能 unpublish 已有的包,gav 命名空间隔离,也不搞什么没用的语义化版本控制。 真搞不懂前端怎么抄都不会抄 |
19
deplives 10 小时 16 分钟前
前端真有意思,要么 npm 上传武林外传,要么 npm 投毒
|
![]() |
20
darksword21 PRO 前端真有意思,要么 npm 上传武林外传,要么 npm 投毒
|
21
billlee 9 小时 37 分钟前
没理解你说的硬件钱包是怎么兜底这个问题的?既然产生了肉眼几乎分辨不了的地址,那硬件钱包就算专门弄个屏幕显示出来交易信息,用户也还是会批准啊?
|
![]() |
22
deepbytes OP @billlee 由于地址很长,可以重点核对地址的开头 4-6 位和结尾 4-6 位。这次攻击虽然能生成视觉上相似的地址,但在逐字符比对下,差异是绝对存在的…
硬件钱包,它在被恶意控制的电脑环境之外,提供了一个可信的“信息安全岛”。它给了用户一个机会,在资产离手前的最后一刻,看到这笔交易未经篡改的交易信息。 anyway ,信任硬件钱包,不信任浏览器网页的显示、插件的显示。最终点击前,自己在硬件钱包确认,😑,终究还得提高安全意识 |
23
wzy44944 9 小时 4 分钟前
好奇这个开发者是如何自证清白的?毕竟这种攻击要提前做大量准备,而且攻击范围有限,只能攻击开发者,要是没有人被成功钓鱼,前期准备就都没用了,代价很大。
|
24
Ghostisbored 8 小时 57 分钟前
我怎么觉得每年 npm 都会有投毒事件 还不能有效避免
|
![]() |
25
softlight 8 小时 54 分钟前
这种攻击时直接访问网站就会被劫持么
|
26
latifrons 8 小时 54 分钟前 ![]() 还是 Go 的包管理好,全源代码透明,没有人看不懂的东西在当中作梗。
|
27
guoooo00oohao 8 小时 51 分钟前
赞同前面人的观点,js 真的可读性不好。包含好自己的资产,远离浏览器钱包生态。
|
![]() |
28
deepbytes OP @wzy44944 可以了解下这个开发者,不过也有 XZ Utils 后门事件 (2024 年),还有经典的 event-stream 恶意代码事件 (2018 年)先例
|
![]() |
30
jiangzm 8 小时 31 分钟前
npm 经常出这种投毒就是因为依赖关系复杂和碎片化, 要解决这个问题首先官方或者联盟提供基础库,另外给 NPM 包加信任标签,这样就能减少间接引用不信任的包。
|
![]() |
31
BaiLinfeng 7 小时 56 分钟前
啥叫浏览器钱包哦
|
33
aloxaf 7 小时 27 分钟前
|
![]() |
34
zazzaz 7 小时 15 分钟前
没必要神化硬件钱包,现在讨论的这个攻击场景硬件钱包哪怕是指纹识别也是防不住的。
唯一有用的方式是上链请求发出之前人工仔细检查合约地址的每一个字是不是一致,但一次两次还行,多了肯定会偷懒的 |
35
coolcoffee 7 小时 5 分钟前
太恐怖了,现在 1password 的界面也是 electron 写的,如果哪天也被这个供应链攻击那就丸辣。
|
![]() |
37
deepbytes OP @coolcoffee 佬多虑了,这种级别的大公司,更新都是有严格控制的,electron 也有最佳安全实践,理论上的可能性不等于现实中的高概率。正是因为他们知道自己是最高价值的目标,所以他们投入了业界最高级别的资源和流程来确保这条攻击路径被层层设防、几乎无法走通。
|
![]() |
38
AkinoKaedeChan 6 小时 48 分钟前 ![]() Safepal 有个注册花 5 USDC 送硬件钱包的,属于能用级别,就是那个服务要 KYC 。
|
39
bigtear 6 小时 45 分钟前
@stinkytofux bitwarden 浏览器插件应该是解锁插件动态解密的,没有保存明文,设置一个短一点的自动锁定时间就行了
|
40
bigtear 6 小时 43 分钟前
@stinkytofux 至于如果是官方版本被源码级别劫持,那谁都没办法
|
41
stinkytofux 6 小时 43 分钟前
@bigtear #39 锁定超级麻烦, 用的时候还要解锁, 我一般都是重启浏览器才锁定. 平时一直解锁.
|
42
bigtear 6 小时 43 分钟前
@stinkytofux #41 pin 啊,我一直设定的一个 pin 码解锁,还挺方便的,毕竟安全点
|
![]() |
43
wobuhuicode 6 小时 36 分钟前
硬件钱包之前就出过事故了,你以为在里面安全生成的私钥,早就给人记录好的。
|
![]() |
44
deepbytes OP @wobuhuicode 佬,有更好的办法么?
|
45
yurenfeijing 5 小时 45 分钟前
@deepbytes #29 除非是浏览器的插件用了这些被投毒的依赖,不然只访问网页,怎么可能读到插件钱包的数据呢。插件能劫持网页的接口,反过来如果网页被投毒了,没法检测插件的接口吧
|
![]() |
47
deepbytes OP @yurenfeijing 可以了解一下 window.ethereum 对象。
--- 理解这个攻击场景的原理: 1 、攻击者没有攻破浏览器的沙箱,也没有读取插件钱包的任何内部数据。 2 、只是在网页自己的地盘上,利用了网页与钱包之间必须存在的、公开的通信接口,进行了一次中间人攻击。它污染的是即将发送给钱包的数据,而不是钱包本身。 3 、网页被投毒后,它不是去“检测”插件,而是去“欺骗”插件。它给插件提供的是伪造的交易请求,而插件本身无法分辨这份请求在到达它之前是否已经被篡改过 |
48
duuu 5 小时 7 分钟前
意思是交易的时候,把钱包要转账的地址改成了黑客的地址是吗?
如果我是普通的前端开发者,是不是就不会受影响? |
![]() |
49
kerryeva 4 小时 12 分钟前
trezor ?我用了五六年了,第一带版本
|
51
sampeng 3 小时 50 分钟前 via iPhone
每年固定节目也是没谁了
|
52
hongweiliuruige 3 小时 30 分钟前
npm lock 文件轻易不要动,升级版本仔细审查,合并冲突认真检查! 然而很少有人或者团队做到,包括很多大公司,无脑升级。。
|
53
latifrons 3 小时 7 分钟前 ![]() 从来没相信过硬件钱包,谁知道里面有什么神奇的 5G 芯片呢。况且就算显示了交易信息,很多基于智能合约的交易内容人根本看不懂,硬件钱包最多也只能解析几种最常见的 ERC20 函数签名( transfer,transferFrom ),对于 DeFi 应用根本防不住。
所以目前看还是找一台不联网的老安卓手机装一个 AirGap Vault ,自建硬件钱包比较靠谱。 |
54
DefoliationM 48 分钟前 via Android
@stinkytofux 指纹解锁很方便,碰一下就行了。
|