攻击步骤如下: 1. 攻击前,黑客准备工作:攻击者将一些BEAN代币存入Beanstalk,并创建了恶意提案"InitBip18"。一旦提案生效,协议中的资产将转移到攻击者手中。 2. 攻击开始:攻击者使用闪电贷款借出3.5亿Dai、5亿USDC、1.5亿USDT、3200万Bean和1160万LUSD。 3. 借出的资产转换为795个BEAN3Crv-f和58,924,887个BEANLUSD-f。 4. 攻击者将步骤2中获得的所有资产存入Diamond合约,并恶意投票支持BIP18提案。 5. 立即调用emergencyCommit函数执行恶意的BIP18提案。 6. 在第3和第4步之后,攻击者窃取了合约中的36,084,584个BEAN、0.54个UNIV2(BEAN-WETH)、874,663,982个BEAN3Crv和60,562,844个BEANLUSD-f。 7. 攻击者利用窃取的资产偿还闪电贷款,并获得剩余的24,830个WETH和36,398,226个BEAN使得攻击者可以借用协议支持的多种代币进行恶意投票。
攻击者是如何绕过验证的: 为了执行"emergencyCommit"函数,攻击者需要绕过以下验证: - 验证一:提案后需要有24小时的窗口期。 - 验证二:确保对某一特定提案的投票比例不低于⅔。 由于BIP18提案是在一天前创建的,因此绕过了验证一;通过闪电贷款,BIP18提案的投票比例超过了78%,超过了67%,因此绕过了验证二。
关于资产去向的其他细节: 漏洞交易: - BIP18提案:链接地址 - 执行BIP18:链接地址
合约地址: - 受害者合同:链接地址 - 攻击者合同:链接地址 - 恶意提案:链接地址 - 攻击者的初始资本活动:链接地址
最后,通过审计我们发现闪电贷款存在操纵投票的风险。CertiK已经通过推特预警账号和官方预警系统发布了相关信息。在未来,CertiK将继续在官方账号上发布与项目预警(攻击、欺诈、跑路等)相关的信息。