
JustLend DAO完成首轮JST回购
北京时间 2023 年 10 月 18 日 19: 48: 59 ,Hope.money 的借贷池受到了基于闪电贷实施的攻击。
Hope.money 构建了包括 HopeLend 借贷平台、HopeSwap 去中心化交易所、稳定币$HOPE、治理代币$LT,为用户提供去中心化金融全栈服务。
本次攻击涉及的协议是 HopeLend,是一个去中心化借贷平台,用户可以为协议提供流动性或者超额抵押借贷赚取收益。
事件始末
在 HopeLend 的代码实现中,借贷池存在可被利用的漏洞,由于在销毁存款凭证时,出现了错误的整数除法问题,导致小数点部分被截断,实现了销毁比预期少的凭证数量,获得和预期一致的价值代币。
攻击者利用这个缺陷掏空了 Hope.money 上存在资金的多种借贷池。
其中 hEthWbtc 借贷池于 73 天前部署,但是其中没有资金,因此黑客通过往该借贷池注入大量资金来达到让贴现率戏剧性地暴涨,从而实现了在一个区块交易内快速掏空了所有其他借贷池子的资金。
更戏剧性的是,实现利用的黑客没有获得漏洞利用的资金,他的攻击交易被抢跑者发现,抢跑者模仿其攻击行为并成功抢走了所有攻击收益资金( 527 ETH),最终有 50% 的攻击收益资金( 263 ETH)被抢跑者用于贿赂打包区块的矿工(payload)。
发现漏洞的初始黑客,在区块 18377039 创建了攻击合约,并在区块 18377042 进行了攻击合约的调用,此时抢跑者监控到内存池里的交易,并将其攻击合约进行模拟,作为抢跑合约的输入,在同样的 18377042 区块进行利用,而初始黑客在 18377042 区块的交易由于排序在抢跑者后面,从而执行失败了。

资金去向
抢跑者在获得收益后的一小时,将资金转移到:0x9a9122Ef3C4B33cAe7902EDFCD5F5a486792Bc3A

在 10 月 20 日 13: 30: 23 ,疑似官方团队联系了该地址,允许抢跑者留下 26 ETH(10% 的获利)作为奖励,并得到抢跑者的答复。

最终资金在沟通一个小时后,转移到 GnosisSafe 的多签金库中。

下面我们将展示真实的漏洞和黑客进行利用的细节。
前置信息
*HopeLend 的借贷协议实现 Fork 自 Aave,因此涉及到漏洞相关的核心业务逻辑参考自 Aave 的白皮书。
0x00 存款和借贷
Aave 是一个纯粹的 DeFi,借贷业务通过流动性池实现,用户在 Aave 存款提供流动性时,期望获得借贷所获得的收益。
贷款收益并不会完全分配给用户,有少部分利息收入会被计入风险储备金,此部分比例较少,大部分贷款收益会分发给提供流动性的用户。
在 Aave 中进行存款放贷时,Aave 是通过贴现的方式,将不同时间点的存款数量转化成流动性池初始时间点的存款数量份额,因此每数量份额的底层资产对应的本息和,就可以直接用 amount(份额) * index(贴现率)算出来,大大方便了计算和理解。
可以理解为类似购买基金的过程,基金的初始净值是 1 ,用户投入 100 块钱获得 100 的份额,假设经过一段时间获得收益,净值变成 1.03 ,此时用户再次投入 100 块钱,获得的份额是 97 ,用户的总份额是 197 。
这其实是将该资产按照 index(净值)进行贴现处理。之所以这么处理,是因为用户实际的本息和是用 balance 去乘以当前的 index。当第二次存款的时候,用户正确的本息和应该是 100 * 1.03 + 100 = 203 ,如果不做贴现处理,第二次用户存入 100 后的本息和就变成了( 100+ 100) * 1.03 = 206 ,是错误的,如果进行了贴现,本息和就变成了(100 + 100 / 1.03) * 1.03 = 103 + 100 = 203 , 203 的结果是正确的。
攻击过程
0x25126......403907(hETHWBTC pool)
0x5a63e......844e74(攻击合约-套现)
攻击者:
1. 借出初始闪电贷资金,进行质押
免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。

和全球数字资产投资者交流讨论
扫码加入OKEx社群
industry-frontier