Cream 第二次攻击策略
攻击交易链接
https://etherscan.io/tx/0xa9a1b8ea288eb9ad315088f17f7c7386b9989c95b4d13c81b69d5ddad7ffe61e
攻击流程
1. 第一步,从uniswap闪电贷借了500个WETH
2. 从Cream存款500,获取 24172个 crETH
3. 从Cream的AMP池贷款19480000个AMP
重入合约再借出355个ETH
4. 将 9740000个 AMP转给第二个攻击合约地址
5. 第二个合约地址授权AMP存款,然后清算第一个攻击合约的贷款(因为已经重入贷款了)
6. 通过清算第一个攻击合约地址,将清算所得的9068个crETH 给第二个攻击合约地址
7. 第二个合约地址通过9068个crETH存款凭证取回获取187个WETH,再转回给第一个合约攻击地址
8. 第一次合约地址再将 355 Ether 换成WETH,此时一共存款542.58个ETH
9. 把WETH加闪电贷手续费一共501.55个WETH还给UNI
10. 将赚取的41个WETH与974万个AMP给获利地址
攻击核心原因
再于重入合约借贷(能重入攻击原因为cream的借贷资产AMP代币是基于ERC1820协议并类似于ERC777D的代币,而AMPtoken本身合约是允许调用hook,所以导致有重入攻击的可能),并且借贷平台本身未做重入贷款的限制。
解决方案
Cream是基于compound借贷协议,所有基于compound借贷协议都应该有这个问题,需要升级,避免重入贷款的修正
修改方案:
参考链接 https://github.com/compound-finance/compound-protocol/pull/153
Last updated
Was this helpful?