# Jarvis Network项目遭受闪电贷重入攻击分析2023年1月15日,Jarvis_Network项目遭到攻击,导致663,101个MATIC被盗。这起事件引发了对项目安全性的关注。通过对交易调用栈的分析,发现攻击者利用了重入漏洞。在重入过程中,对同一合约的相同函数调用,虽然输入参数相同,但返回值却有显著差异。这种差异主要发生在remove_liquidity函数中。重入攻击主要针对某智能合约的remove_liquidity函数。该函数在移除流动性时会将用户添加的代币返回。由于Polygon和EVM链的同构性,在MATIC转账给合约时触发了重入逻辑。进一步分析发现,问题出在getUnderlyingPrice函数的实现上。该函数涉及多个未开源的合约,增加了分析难度。然而,通过检查存储槽和调用栈,我们可以推断出关键变量的值和函数调用路径。攻击的核心在于get_virtual_price函数的返回值在重入前后发生了显著变化。这个变化与self.D变量的更新时机有关。正常情况下,self.D应该在转账完成后更新,但在此次攻击中,由于重入的发生,导致价格计算出现错误。remove_liquidity函数的执行流程包括:1) 销毁用户LP代币;2) 发送质押资金给用户;3) 更新self.D值。攻击者在第二步进行重入,利用未及时更新的self.D值进行借贷,从而获取了不当利益。值得注意的是,虽然remove_liquidity函数使用了@nonreentrant('lock')装饰器来防止重入,但由于攻击者重入后进入了其他合约进行借贷,这个重入锁并未起到预期效果。这次攻击暴露了智能合约中变量更新时机的重要性。为提高安全性,建议项目方采取以下措施:1. 进行严格的安全审计2. 确保变量修改在外部调用之前完成3. 采用多数据源方式获取价格信息4. 遵循"检查-生效-交互"(Checks-Effects-Interactions)模式编写代码通过实施这些最佳实践,可以显著提升智能合约的安全性和稳定性,为Web3生态系统提供更可靠的基础设施。
Jarvis Network遭闪电贷重入攻击 663,101 MATIC被盗
Jarvis Network项目遭受闪电贷重入攻击分析
2023年1月15日,Jarvis_Network项目遭到攻击,导致663,101个MATIC被盗。这起事件引发了对项目安全性的关注。
通过对交易调用栈的分析,发现攻击者利用了重入漏洞。在重入过程中,对同一合约的相同函数调用,虽然输入参数相同,但返回值却有显著差异。这种差异主要发生在remove_liquidity函数中。
重入攻击主要针对某智能合约的remove_liquidity函数。该函数在移除流动性时会将用户添加的代币返回。由于Polygon和EVM链的同构性,在MATIC转账给合约时触发了重入逻辑。
进一步分析发现,问题出在getUnderlyingPrice函数的实现上。该函数涉及多个未开源的合约,增加了分析难度。然而,通过检查存储槽和调用栈,我们可以推断出关键变量的值和函数调用路径。
攻击的核心在于get_virtual_price函数的返回值在重入前后发生了显著变化。这个变化与self.D变量的更新时机有关。正常情况下,self.D应该在转账完成后更新,但在此次攻击中,由于重入的发生,导致价格计算出现错误。
remove_liquidity函数的执行流程包括:1) 销毁用户LP代币;2) 发送质押资金给用户;3) 更新self.D值。攻击者在第二步进行重入,利用未及时更新的self.D值进行借贷,从而获取了不当利益。
值得注意的是,虽然remove_liquidity函数使用了@nonreentrant('lock')装饰器来防止重入,但由于攻击者重入后进入了其他合约进行借贷,这个重入锁并未起到预期效果。
这次攻击暴露了智能合约中变量更新时机的重要性。为提高安全性,建议项目方采取以下措施:
通过实施这些最佳实践,可以显著提升智能合约的安全性和稳定性,为Web3生态系统提供更可靠的基础设施。