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