黑客获利约630万美元 算法稳定币$DEI被攻击事件分析
2023年5月6日,据Beosin-Eagle Eye态势感知平台消息,算法稳定币DEI项目合约遭受黑客攻击,黑客获利约630万美元。Beosin安全团队第一时间对事件进行了分析,结果如下。
事件相关信息
攻击交易
https://bscscan.com/tx/0xde2c8718a9efd8db0eaf9d8141089a22a89bca7d1415d04c05ba107dc1a190c3
https://arbiscan.io/tx/0xb1141785b7b94eb37c39c37f0272744c6e79ca1517529fec3f4af59d4c3c37ef
攻击者地址
Bsc:0x08e80ecb146dc0b835cf3d6c48da97556998f599
Arbitrum:0x189cf534de3097c08b6beaf6eb2b9179dab122d1
被攻击合约
0xde1e704dae0b4051e80dabb26ab6ad6c12262da0
攻击流程
两条链上漏洞原理以及攻击手法相同,这里以Bsc链上交易为例进行分析:
1.攻击者调用攻击合约的0xf321f780函数发起攻击。
2.攻击合约首先调用DEI合约的approve函数给pair授权一个很大的值,随后调用DEI合约的burnFrom函数,传入pair地址。
3.随后,攻击合约直接调用DEI合约的transferFrom函数将pair的DEI代币全部转移给攻击合约,只剩下一个单位的DEI代币。
4.之后,攻击合约调用pair的sync函数,更新储备量,此时pair中只有1个单位的DEI和超130万枚USDT。
5.最后,攻击合约使用所有的DEI将USDC全部兑换出来。
漏洞分析
我们从上述的攻击过程不难发现,本次事件的主要问题在于第2步与第3步,攻击者调用了approve和burnFrom函数之后,为什么就能直接调用transFrom函数将“其他人”的代币转移走?
我们看一下approve与burnFrom函数的代码,approve函数为正常授权函数,并没有什么问题,关键在于burnFrom函数(如下图),burnFrom函数正常逻辑是获取被销毁地址给调用者地址授权数量,之后将授权数量减去销毁数量的新值用于更新授权数量。可以看到,309行的代码函数获取用户授权值,而开发者将被销毁地址与调用者地址写反,导致获取的授权值是黑客可以任意设置的,在这之前,黑客调用approve函数授权了一个巨大的数,所以这里获取的值是一个巨大的值,在310行代码,将授权值进行更新,这里传递的值就是一个异常大的值,导致burnFrom函数调用结束后,pair地址给黑客地址授权了一个巨大的值,而黑客也能任意控制pair的代币。
资金追踪
截止发文时,被盗资金还未被攻击者转出。
总结
针对本次事件,Beosin安全团队建议:
1.合约开发时,涉及权限相关的函数一定要仔细思考其运行逻辑,并做好每一步的测试,防止因为粗心大意导致不可挽回的后果。
2. 项目上线前,建议选择专业的安全审计公司进行全面的安全审计,规避安全风险。
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
Bitcoin Price Consolidates Below Resistance, Are Dips Still Supported?
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
XRP, Solana, Cardano, Shiba Inu Making Up for Lost Time as Big Whale Transaction Spikes Pop Up
Justin Sun suspected to have purchased $160m in Ethereum
Justin Sun suspected to have purchased $160m in Ethereum