前言
北京时间2022年6月8日,知道创宇区块链安全实验室?自动数据监测工具监测到BSC链上NFT项目GYMNetwork因"PublicdepositFromOtherContract"权限控制问题被攻击,损失包括7475枚BNB,共计约216W美元,目前已将兑通过DEX换70W美元的ETH通过Celer跨链到以太坊,2000枚BNB利用BSC-Tornado进行混币,余下3000枚BNB在攻击者地址。
知道创宇区块链安全实验室?第一时间跟踪本次事件并分析。
基础信息
Soluna Holdings宣布建立用于比特币挖矿和其他密集型计算应用的绿色数据中心:金色财经报道,Soluna Holdings首席执行官John Beliziare向股东发表了一封公开信,宣布建立用于比特币挖矿和其他密集型计算应用的绿色数据中心。
John Beliziare称,比特币在加密货币领域的突出地位及其对安全解决方案日益增长的需求使其非常适合我们的有限能源方法,而人工智能的兴起为我们公司提供了进一步增长和多元化的机会。[2023/6/23 21:55:15]
被攻击合约:0x0288fba0bf19072d30490a0f3c81cd9b0634258a
LUNC销毁量已超过260亿枚,Binance 给予支持最大:金色财经报道,自 Terra 网络崩溃之后,LUNA Classic(LUNC)社区在过去几个月一直尝试销毁其原生代币LUNC,截至目前已有约 263 亿枚 LUNC 被销毁,其中 Binance 给予的支持最大,该交易所目前已经销毁了价值超过 300 万美元的 LUNC。然而总销毁量仅占到 LUNC 总供应量的 0.38%,因此对价格影响仍没有想象中的那么大,因为之前供应量为几亿枚的数字资产现在已经变成了市场上流通的数万亿枚 LUNC。在撰写本文时,LUNA Classic 的交易价格为 0.00023 美元,市值为 15.5 亿美元,排名第 37 位,领先于其继任者 Terra LUNA,后者的市值为 3.04 亿美元。(bitcoinist)[2022/11/8 12:30:07]
攻击者地址:0xB2C035eee03b821cBe78644E5dA8B8eaA711D2e5
动态 | 加拿大区块链公司与Soluna合作 助其创建风力发电厂提供廉价挖矿能源:据Business Wire消息,加拿大区块链公司DMG与Soluna达成合作。据悉,DMG将为Soluna提供硬件采购,数据中心设计,采矿设置,远程硬件和系统监控以及所有必要的支持服务。据此前报道,Soluna计划在摩洛哥撒哈拉沙漠中建造一个风力发电场,将会加密矿商提供约0.2元/度的廉价电力。[2018/9/15]
攻击合约:0xcD337b920678cF35143322Ab31ab8977C3463a45、0x68b5f1635522ec0e3402b7e2446e985958777c22
tx:0xfffd3aca0f53715f4c76c4ff1417ec8e8d00928fe0dbc20c89d875a893c29d89
GymSinglePool代理合约:0xa8987285e100a8b557f06a7889f79e0064b359f2
漏洞分析
项目方在GymSinglePool合约中实现过程中对于0x0288fba0bf19072d30490a0f3c81cd9b0634258a#depositFromOtherContract函数缺少了权限控制,导致攻击者能够通过该函数调用内部_autoDeposit函数实现零消耗质押:
对于应该开放给用户的质押内部函数是_deposit函数,该函数实现了对于token的审批传入,如下图所示:
对应的_autoDeposit函数则实现了"特权"质押,即不需要转入Token进行质押。同时该函数直接暴露给了用户,函数对比如下:
攻击流程
攻击者为了防止链上MEV和抢跑机器人,将合约进行了分步部署执行,同时部署/调用了多次以完成对GymNetwork合约(0x3a0d9d7764FAE860A659eb96A500F1323b411e68)中的GYMNETToken完全抽离,以其中一笔部署调用为例:
1.部署合约后调用depositFromOtherContract实"特权"质押,对应0xfd4a2266方法:
内部调用细节如下:
2.调用0x30649e15实现对上一步特权质押的Token回撤:
3.利用0x1d111d13函数售出获取到的的GYM-Token:
重复多次"特权"质押--回撤--售出步骤,攻击者最终获取到7475枚BNB:
为了抑制抢跑,攻击者将添加质押和回撤进行了步骤分离,两个步骤均为核心操作,同时刻意提高添加部分步骤的GasPrice为15/20gwei,可见攻击者是有意为之。
溯源处置
本次攻击原因是项目方实现的特权函数权限控制不当,在攻击发现的1小时后项目方将GymSinglePool代理合约的逻辑合约进行了多次修改,为其添加了权限控制:
并在20分钟后对逻辑合约添加了紧急账户处置函数:
而对于项目方Deployer地址分析,其部署的多个GymSinglePool合约根据追踪仅在两天前部署的GymSinglePool合约中存在漏洞,4天前的合约则不存在此函数:
同时代理合约对应的逻辑合约被升级为漏洞合约的事件发生在在2days13hrsago:
攻击者的资金准备(FromTornado)则在约6小时以前,攻击者的身份也值得令人深思。
总结
虽然只是一处小的控制缺陷,却导致了数百万美元的损失。项目方的处置虽较为及时,漏洞导致的损失却难以挽回。该类型漏洞在审计过程中很容易被发现并将归纳到逻辑缺陷/不安全的外部调用,各项目方在开发和审计流程上切莫大意。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。