这个漏洞我在2022年02月23日已经在这里发布过,由于内容比较敏感,发布后没多久就将文件的主要内容都删除了。然而,这个漏洞还是被利用了,March-15-2022 06:28:40 PM +8 UTC,Hundred Finance遭受攻击,黑客获利2363 ETH。Hundred Finance代码源自Compound,文中有在rinkeby上模拟攻击的交易,可以自行核对时间。
给借款人转账,然后更新用户账本 https://github.com/compound-finance/compound-protocol/blob/master/contracts/CToken.sol#L786
退出市场,检查用户是否可以退出
https://github.com/compound-finance/compound-protocol/blob/master/contracts/ComptrollerG7.sol#L175
https://rinkeby.etherscan.io/tx/0x944f46be4591dbed7d855e99b5707557fd074303ff9c1935b2bc35c5e61d2eda
可以看出,攻击合约按照前面描述的流程,完成攻击后,合约内的资产多了800USDT。
根据上面的分析可知,只要代币市场中有ERC777存在,就具备了攻击的条件! 另外,有很多项目是fork自Compound的,如果在fork项目时,将转eth的代码改用当前应用较广泛的TransferHelper.safeTransferETH(),则会导致这种攻击的发生。因为TransferHelper.safeTransferETH()通常的实现没有限制gas。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!