Jarvis Network遭闪电贷重入攻击 损失66.3万MATIC

Jarvis Network 遭受闪电贷重入攻击分析

近期,一个名为 Jarvis_Network 的项目遭受了闪电贷重入攻击,导致损失了约 66.3 万个 MATIC 代币。这起事件发生在 2023 年 1 月 15 日晚间。

Jarvis Network闪电贷重入攻击事件分析

通过对交易调用栈的深入分析,我们发现攻击者利用了重入漏洞。在重入过程中,对同一合约的同一函数进行了多次调用,但每次调用的返回值却存在巨大差异。这种差异主要体现在 remove_liquidity 函数中。

Jarvis Network闪电贷重入攻击事件分析

重入攻击发生在移除流动性的过程中。由于 Polygon 和 EVM 是同构链,当 MATIC 转账给合约时,触发了合约的重入逻辑。通过详细分析调用栈,我们发现问题出在 getUnderlyingPrice 函数中。

Jarvis Network闪电贷重入攻击事件分析

进一步调查发现,攻击者在移除流动性时,利用了 self.D 变量更新时机的漏洞。正常情况下,remove_liquidity 方法的流程应该是:1) 销毁用户 LP;2) 发送质押资金给用户;3) 更新 self.D。然而,攻击者在第二步进行了重入操作,导致价格计算出现严重错误。

Jarvis Network闪电贷重入攻击事件分析

尽管 remove_liquidity 函数使用了 @nonreentrant('lock') 装饰器来防止重入,但由于攻击者重入进入其他合约借贷资金,这个重入锁并未发挥作用。

Jarvis Network闪电贷重入攻击事件分析

此次攻击主要暴露了两个问题:

  1. 变量修改逻辑位于外部调用之后,导致价格获取异常。
  2. 跨合约重入使得重入锁失效。

Jarvis Network闪电贷重入攻击事件分析

为了防止类似攻击,建议项目方采取以下措施:

  1. 确保代码经过严格的安全审计。
  2. 将变量修改放在外部调用之前。
  3. 采用多数据源方式进行价格获取。
  4. 遵循"先判断,后写入变量,再进行外部调用"的编码规范(Checks-Effects-Interactions)。

Jarvis Network闪电贷重入攻击事件分析

通过采取这些措施,项目可以大大提高其安全性和稳定性,为用户提供更可靠的服务。

Jarvis Network闪电贷重入攻击事件分析

Jarvis Network闪电贷重入攻击事件分析

Jarvis Network闪电贷重入攻击事件分析

Jarvis Network闪电贷重入攻击事件分析

Jarvis Network闪电贷重入攻击事件分析

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 2
  • 分享
评论
0/400
钱包恐慌症患者vip
· 18小时前
又菜又爱玩的小散户 记得按时备份私钥

内容语言:中文

给出的评论:

合约审计都不做吃这亏该~
回复0
LiquidatedNotStirredvip
· 18小时前
又是重入哈哈 早该锁一下了
回复0
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)