SOL:首发 | Solana跨链桥虫洞事件分析

北京时间2022年2月3日凌晨1点58分,Solana跨链桥项目虫洞(Wormhole)遭受攻击者发起的攻击。黑客绕过了 Solana 上的Wormhole Bridge验证过程,并为自己铸造了Wormhole ETH (wETH)。

此次事件中,攻击者通过注入一个性的 sysvar 帐户绕过了系统验证步骤,并成功生成了一条恶意“消息”,指定要铸造12万枚wETH。最后,攻击者通过使用恶意“消息”调用了“complete_wrapped”函数,成功铸造了12万枚wETH,价值约3.2亿美元。

该事件造成的损失金额之大,令其成为了DeFi史上第二大黑客攻击事件。

虫洞(Wormhole),又称爱因斯坦-罗森桥,也译作蛀孔。是宇宙中可能存在的连接两个不同时空的狭窄隧道。

言归正传,其实Solana的跨链桥虫洞协议(Wormhole Protocal),确有虫洞在科学乃至科幻小说里相同的意思和定位。

百度Apollo首发 “Apollo 001”系列纪念数字藏品:金色财经报道,据百度Apollo智能驾驶官方公众号,百度Apollo全网首发首款 “Apollo 001”系列纪念数字藏品,以百度汽车机器人为主体形象,每款对应一个百度Apollo自动驾驶重要里程碑事件。据悉,该数字藏品将于2022年7月8日 09:55发布汽车机器人家族全家福空投款。[2022/7/7 1:58:19]

虫洞可连接两个不同时空的隧道,从而节约时间进行“传送”。而Solana的跨链桥虫洞协议(Wormhole Protocal),是连接以太坊的桥。简单来说,它帮助我们节约了交易的时间和周期,避开以太坊的拥堵从而体验到Solana的快速交易。

铸币12万枚Wormhole ETH: 

https://solscan.io/tx/2zCz2GgSoSS68eNJENWrYB48dMM1zmH8SZkgYneVDv2G4gRsVfwu5rNXtK5BKFxn7fSqX9BvrBc1rdPAeBEcD6Es 

LBank蓝贝壳于4月9日16:50首发 BOSON:据官方公告,4月9日16:50,LBank蓝贝壳首发BOSON(Boson Protocol),开放USDT交易,4月9日16:00开放充值,4月12日16:00开放提现。上线同一时间开启充值交易BOSON瓜分10,000 USDT。

LBank蓝贝壳于4月9日16:50开启充值交易BOSON瓜分10,000 USDT。用户净充值数量不少于1枚BOSON ,可按净充值量获得等值1%的BOSON的USDT空投奖励;交易赛将根据用户的BOSON交易量进行排名,前30名可按个人交易量占比瓜分USDT。详情请点击官方公告。[2021/4/9 20:02:26]

将代币转到以太坊: 

https://etherscan.io/address/0x629e7da20197a5429d30da36e77d06cdf796b71a#internaltx 

步骤一:攻击者使用假 sysvar account调用“verify_signatures”函数:https://solscan.io/tx/25Zu1L2Q9uk998d5GMnX43t9u9eVBKvbVtgHndkc2GmUFed8Pu73LGW6hiDsmGXHykKUTLkvUdh4yXPdL3Jo4wVS①以伪造的“sysvar account”作为参数调用的“verify_signatures”函数:

首发 | DVP: Bitstamp交易所存在漏洞 可导致大量KYC等信息被泄露:金色财经讯,近日,DVP收到安全人员提交的全球知名交易所Bitstamp的漏洞,攻击者可以利用该漏洞查看大量用户ID、银行卡等敏感信息,严重威胁用户信息安全。为避免发生KYC泄露的恶性事件,DVP安全团队在收到该漏洞后,第一时间通知该平台进行修复,但未收到回应。DVP提醒相关用户关注个人信息安全,以免造成损失。[2019/8/13]

相比之下,以下截图是以真实的“sysvar account”作为参数的“verify_signatures”函数:

② “verify_signatures”函数从 sysvar (L92) 加载当前指令。

首发 | 蚂蚁矿机S17真机图首次曝光 采用双筒风扇及一体机设计 ?:继正式宣布在4月9日现货销售后,比特大陆即将发布的新品蚂蚁矿机S17又有了新动态。据悉,蚂蚁矿机S17真机图今天在网上首次曝光。

从曝光的图片来看,蚂蚁矿机S17延续上一代产品S15的双筒风扇设计,且采用一体机的机身设计。有业内人士认为,采用双筒设计可有效缩短风程,矿机出入风口的温差变小,机器性能将得到很大改善。

此前比特大陆产品负责人在接受媒体采访时表示,新品S17较上一代产品相比,无论是在能效比还是单位体积的算力等方面,均有较大提升。[2019/4/3]

③ 然而,函数“load_current_index”并不能验证“sysvar account”是否真的是“system sysvar”。由于从“sysvar”中检索到的当前指令(L92)是由攻击者控制的,因此它可以顺利通过以下验证过程。

IMEOS首发 BM表示EOS合约具有整数溢出保护:据金色财经合作媒体IMEOS报道:近日ETH出现多个ERC20智能合约的处理溢出错误,BM在推特上发表评论:新的ETH契约Bug可能会破坏整个Token的供应,让持有者留下无价值Token.这就算为什么代码不能成为法律,随即表示EOS erc合约不容易受到这种攻击。而EOS官方群也有人表示担忧EOS是否具有整数溢出保护?BM回应:有很多C ++模板类可以封装类型并检查溢出。[2018/4/25]

步骤二:攻击者随后使用上一步验证的签名调用“post_vaa”函数,并创建一个恶意消息帐户,声明要铸造12万枚wETH:https://solscan.io/tx/2SohoVoPDSdzgsGCgKQPByKQkLAXHrYmvtE7EEqwKi3qUBTGDDJ7DcfYS7YJC2f8xwKVVa6SFUpH5MZ5xcyn1BCK

① Account2 是通过“verify_signatures”指令生成的签名集。② Account3 是将在“complete_wrapped”函数中使用的消息帐户。

步骤三:攻击者调用“complete_wrapped”函数读取恶意消息账户中的数据并铸造 12万枚wETH:https://solscan.io/tx/2zCz2GgSoSS68eNJENWrYB48dMM1zmH8SZkgYneVDv2G4gRsVfwu5rNXtK5BKFxn7fSqX9BvrBc1rdPAeBEcD6Es

① Account3 是“post_vaa”函数生成的消息账户。

② Account6 是“收件人”地址,用于接收铸造的Wormhole ETH。③ Account9 是 Wormhole ETH 的铸币机构,是一个 PDA(程序派生地址)。这就是为什么在签名验证通过后,攻击者可以直接铸造代币。

步骤四:部分铸造的 wETH 被转移到以太坊,其余的被交换到 USDC 和 SOL:

https://solscan.io/tx/j3jUDG43di8Dsg7Q3jQhstamtBovu1GLqnDJ7yNvM3r4pnK9e7uqgt9uBobCjT5S1BKhZZFQNQwDxypEYqLknec

https://solscan.io/tx/5UaqPus91wvAzKNve6L8YAHsESomZQ7GWi37gPFyzTHcXNMZA641bb8m8txo7bS7A5cAnzKDKYyiKcQC8GgDcAuf

https://solscan.io/tx/3AugXqrXunBa96YfqENhPBiWZWpnSnJdqAHS64qcHTVU9KtfGon8cN9cUuXsDmBobBBXjYUtuRxnYxgERS42nh6G

https://solscan.io/tx/2SndtH3tU4j6v14HJzEde3d3dnpdHqTPn4VnvhTj4zKLo26H5kmtCwjn2nANfjXNVbmFsyEGtD4Jte25azsPwaRk

这个漏洞的根本原因是在验证签名过程(“verify_signatures”)中,程序使用了一个在Solana更新至1.8.0时即被废弃的“load_current_index”函数。该函数不会验证输入的“sysvar account”是否真的是“system sysvar”,从而攻击者可以趁机伪造这个关键帐户。

 

为了防止将来此类问题的发生,必须检查并验证函数使用的所有帐户。特别是在该案例中,由于部分检查过程依赖于外部调用,而外部调用的可靠性被过度信任,从而引入了风险。

目前,Wormhole团队已修复漏洞并已恢复网络。在此,CertiK给开发者提出如下几点建议:

开发者在使用外部依赖的函数时,需要对这个函数有足够的了解。

随时关注外部依赖代码库的重要更新,在有重大版本变动时及时对自己的代码库做出相应的调整。

当代码版本更新时,也需及时进行全面审计,并将审计后的代码及时更新到已部署上链的代码中。

农历破五将至,希望大家“破五穷”。同时也希望每一个项目在经过严格的审计之后上线部署从而获得更高的安全性并减少财产损失的可能。好运从新的一年起开始不断“循环”;安全从严格的审计开始,每个项目都有更好的“开端”!

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:31ms0-1:377ms