# Jarvis Network 遭受闪电贷重入攻击分析近期,一个名为 Jarvis_Network 的项目遭受了闪电贷重入攻击,导致损失了约 66.3 万个 MATIC 代币。这起事件发生在 2023 年 1 月 15 日晚间。通过对交易调用栈的深入分析,我们发现攻击者利用了重入漏洞。在重入过程中,对同一合约的同一函数进行了多次调用,但每次调用的返回值却存在巨大差异。这种差异主要体现在 remove_liquidity 函数中。重入攻击发生在移除流动性的过程中。由于 Polygon 和 EVM 是同构链,当 MATIC 转账给合约时,触发了合约的重入逻辑。通过详细分析调用栈,我们发现问题出在 getUnderlyingPrice 函数中。进一步调查发现,攻击者在移除流动性时,利用了 self.D 变量更新时机的漏洞。正常情况下,remove_liquidity 方法的流程应该是:1) 销毁用户 LP;2) 发送质押资金给用户;3) 更新 self.D。然而,攻击者在第二步进行了重入操作,导致价格计算出现严重错误。尽管 remove_liquidity 函数使用了 @nonreentrant('lock') 装饰器来防止重入,但由于攻击者重入进入其他合约借贷资金,这个重入锁并未发挥作用。此次攻击主要暴露了两个问题:1. 变量修改逻辑位于外部调用之后,导致价格获取异常。2. 跨合约重入使得重入锁失效。为了防止类似攻击,建议项目方采取以下措施:1. 确保代码经过严格的安全审计。2. 将变量修改放在外部调用之前。3. 采用多数据源方式进行价格获取。4. 遵循"先判断,后写入变量,再进行外部调用"的编码规范(Checks-Effects-Interactions)。通过采取这些措施,项目可以大大提高其安全性和稳定性,为用户提供更可靠的服务。
Jarvis Network遭闪电贷重入攻击 损失66.3万MATIC
Jarvis Network 遭受闪电贷重入攻击分析
近期,一个名为 Jarvis_Network 的项目遭受了闪电贷重入攻击,导致损失了约 66.3 万个 MATIC 代币。这起事件发生在 2023 年 1 月 15 日晚间。
通过对交易调用栈的深入分析,我们发现攻击者利用了重入漏洞。在重入过程中,对同一合约的同一函数进行了多次调用,但每次调用的返回值却存在巨大差异。这种差异主要体现在 remove_liquidity 函数中。
重入攻击发生在移除流动性的过程中。由于 Polygon 和 EVM 是同构链,当 MATIC 转账给合约时,触发了合约的重入逻辑。通过详细分析调用栈,我们发现问题出在 getUnderlyingPrice 函数中。
进一步调查发现,攻击者在移除流动性时,利用了 self.D 变量更新时机的漏洞。正常情况下,remove_liquidity 方法的流程应该是:1) 销毁用户 LP;2) 发送质押资金给用户;3) 更新 self.D。然而,攻击者在第二步进行了重入操作,导致价格计算出现严重错误。
尽管 remove_liquidity 函数使用了 @nonreentrant('lock') 装饰器来防止重入,但由于攻击者重入进入其他合约借贷资金,这个重入锁并未发挥作用。
此次攻击主要暴露了两个问题:
为了防止类似攻击,建议项目方采取以下措施:
通过采取这些措施,项目可以大大提高其安全性和稳定性,为用户提供更可靠的服务。
内容语言:中文
给出的评论:
合约审计都不做吃这亏该~