DEUS Finance 漏洞分析 (第一次被黑2022-03-15)
• 攻击者钱包地址
https://ftmscan.com/address/0x1ed5112b32486840071b7cdd2584ded2c66198dd
• 攻击合约地址
https://ftmscan.com/address/0xb8f5c9e18abbb21dfa4329586ee74f1e2b685009
• 攻击交易
https://ftmscan.com/tx/0xe374495036fac18aa5b1a497a17e70f256c4d3d416dd1408c026f3f5c70a3a9c
• Oracle合约
https://ftmscan.com/address/0x5CEB2b0308a7f21CcC0915DB29fa5095bEAdb48D#code
• DeiLenderSolidex 合约地址
https://ftmscan.com/address/0xec1fc57249cea005fc16b2980470504806fca20d
从交易记录分析攻击过程,因为各交易分析工具均不支持解析Fantom交易,只能从代币转移过程以及交易日志记录分析其利用过程。
之所以可确认是进行清算步骤,是因为日志信息中显示合约0xec1fc5的RemoveCollateral 、Repay 两个函数同时被调用,在其函数liquidate中正好有这两个日志记录。
在liquidate函数中是通过isSolvent函数判断借贷人的资产是否需要被清算,而在isSolvent函数中是通过预言机获取资产价值是否大于贷款价值。
预言机的地址为0x5CEB2b0308a7f21CcC0915DB29fa5095bEAdb48D,查看其公式为:
((dei.balanceOf(address(pair)) + (usdc.balanceOf(address(pair)) * 1e12)) *
1e18) / pair.totalSupply();
其中pair地址为0x5821573d8f04947952e76d94f3abc6d7b43bf8d0 ,正好是之前闪电贷获取DEI的地址。池子是参考uniswap协议实现的,其中totalsupply指的是提供的总流动性凭证,只要用户不提取或注入资金,totalsupply的大小应保持不变。以上公式的意义是指存款人的pair凭证提取资金时可以兑换的DEI、USDC的数量。
通常情况下用户往池中存入代币后,预言机给出的价格是保持不变的。但是池子是可以提供闪电贷的,只要大量借出DEI或USDC,而totalsupply没有变化(因为此时并未有人存款或取款),最终导致通过预言机获取的价格变小,错误认为借款人资不抵债而被清算。
5. 攻击合约将5.23个Solidex sAMM-USDC/DEI Deposit代币兑换成5.23个StableV1 AMM - USDC/DEI代币。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!