Polygon链上LibertiVault合约遭遇攻击分析
据区块链安全审计公司Beosin旗下Beosin EagleEye安全风险监控、预警与阻断平台监测显示**,Polygon链上LibertiVault合约遭遇攻击,损失约123ETH和56,234USDT价值约29万美元,以及以太坊链上35ETH和96223USDT价值约16万美元,总共超45万美元。** 技术人员分析发现,本次攻击是由于LibertiVault合约存在重入漏洞所导致。
1、攻击者使用闪电贷借出500万USDT,调用LibertiVault合约deposit函数进行质押,其质押逻辑会将质押的代币一部分用于兑换,然后再计算铸币数量,铸币数量是根据和合约本次存入代币量与合约存入之前的余额比例来进行计算的。
2、而兑换操作swap会调用黑客的合约,此时黑客第一次重入调用deposit,并在此函数中二次重入,向合约打入250万USDT。
3、二次重入结束后,合约会按照250万USDT与之前合约的USDT余额比值为黑客铸币,第一次重入的deposit函数运行结束后,黑客又向其中打入了250万USDT。
4、此时,执行完了外层deposit函数中的兑换操作,合约又会按照250万USDT与合约USDT余额比值进行铸币。
5、问题就出在第四点,按理来说,第二次计算合约余额应该是之前的余额加上第一次打入的250万余额来作为本次计算的参数,但这里是使用的重入的形式,合约余额在最开始就已经获取了,所以参数并未改变,还是使用的原来的余额进行计算,导致给黑客铸了大量的凭证代币。
6、最后黑客移除凭证代币,归还闪电贷获利。