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

robot
摘要生成中

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

2023年1月15日,Jarvis_Network项目遭遇了一次重大攻击事件,造成663,101枚MATIC的损失。这次攻击利用了闪电贷和重入攻击的组合手法,暴露了项目合约中的严重漏洞。

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

攻击者巧妙地利用了remove_liquidity函数中的一个漏洞。该函数在移除流动性时会返还用户添加的代币。由于Polygon链与EVM兼容,当MATIC转账给合约时,就会触发合约的重入逻辑。

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

分析发现,攻击的关键在于getUnderlyingPrice函数的调用。这个函数在重入前后返回了显著不同的价格:重入前为1002157321772769944,重入后则高达10091002696492234934,相差近10倍。

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

问题的根源在于合约更新self.D变量的时机不当。remove_liquidity函数的执行顺序是:1) 销毁用户LP代币;2) 发送质押资金给用户;3) 更新self.D。攻击者在第二步进行了重入,利用尚未更新的self.D值获取了错误的价格信息,从而进行了有利可图的借贷操作。

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

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

虽然remove_liquidity函数使用了@nonreentrant('lock')装饰器来防止重入,但由于攻击涉及跨合约操作,这个防护措施未能奏效。

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

这次事件凸显了几个关键的安全原则:

  1. 变量修改应在外部调用之前完成,以防止状态不一致。
  2. 价格获取机制应采用多数据源方式,增强可靠性。
  3. 代码逻辑应遵循"检查-生效-交互"(Checks-Effects-Interactions)模式,即先进行条件检查,然后修改状态变量,最后才进行外部调用。

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

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

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

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

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

此次攻击再次证明,智能合约的安全审计至关重要。项目方应该更加重视合约的安全性,确保代码经过全面严格的审核,以防范类似漏洞的出现。

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

此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 分享
评论
0/400
暂无评论
交易,随时随地
qrCode
扫码下载 Gate APP
社群列表
简体中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)