OKLink 2023年度安全事件盘点
Hope.money (Hope Lend) 攻击事件分析
1、Txs
Original hack tx: https://etherscan.io/tx/0xa414de03bbf7baccea6b5c95af9ebfbed43b1c3151debd29673df979a0f4b0b0
Front-run tx: https://etherscan.io/tx/0x1a7ee0a7efc70ed7429edef069a1dd001fbff378748d91f17ab1876dc6d10392
2、Lost
Total ~527 Ether = 264 Ether gain + 263 Ether bribe
3、攻击分解
1、向空的WBTC池子deposit 2k WBTC, liquidity index = 1 Ray.
2、Flash loan 2k WBTC and repay ~2001.8 WBTC, 在callback 回调里,donate了2k WBTC, 并且withdraw 1999….WBTC, 池子剩余1 WEI hWBTC。
注:donation的目的主要是为了提供withdraw的资金。
3、重复2步骤,继续累积liquidityIndex,最后liquidityIndex=7560000001 Ray
liquidityIndex前后对比:
Before: 1000000000000000000000000000
After: 7560000001000000000000000009655610336
4、利用操纵的liquidityIndex, 用1WEI hWBTC去借出大量其他资产,从而获利。
5、创建新攻击合约2,利用rayDiv里四舍五入 rounding up的特性,及1WEI 的hWBTC,重复deposit/withdraw去收回donation的WBTC。
备注:攻击者在deposit WBTC时,使得amountScaled略大于.5 就可得到1WEI hWBTC;withdraw WBTC时,使得amountScaled略小于1.5 就可只burn 1WEI hWBTC。
[(a0/1)+0.5] = 1WEI hWBTC = [(a1/1)+0.5] -> a1-a0: a0=[0.51]. a1: [1.4]
[1.01] = 1 = [1.9]
6、归拢资金。
4. 代码缺陷
1、flashloan会把flashloan的收入分享给各hWBTC holders,hWBTC supply当前为1 WEI,而flashloan income一直在累加,所以导致liquidityIndex被放大。
2、hToken 在mint/burn是采用rayDiv()计算hToken数量,因为rayDiv是四舍五入的,所以结合1WEI supply+很大的liquidityIndex,黑客可以巧妙利用这一特性通过不断mint/burn获利。