Jarvis Network遭受閃電貸重入攻擊 損失663,101 MATIC

robot
摘要生成中

Jarvis Network項目遭遇閃電貸重入攻擊分析

2023年1月15日,Jarvis_Network項目遭受攻擊,損失663,101個MATIC。通過對攻擊交易的調用棧分析,發現存在重入邏輯。在重入過程中,對同一合約的同一函數調用,傳入參數相同,但返回值差異巨大。

Jarvis Network閃電貸重入攻擊事件分析

重入發生在remove_liquidity函數中。該函數在移除流動性時會將用戶添加的代幣返回。由於Polygon與EVM同構,MATIC轉帳給合約時會觸發重入。

Jarvis Network閃電貸重入攻擊事件分析

深入分析發現,問題出在getUnderlyingPrice函數的實現上。該函數涉及多個合約調用,最終影響get_virtual_price函數的返回值。get_virtual_price函數的返回值受self.D變量影響,而self.D的更新在轉帳之後進行。

Jarvis Network閃電貸重入攻擊事件分析

攻擊者在移除流動性時,MATIC轉移到攻擊合約後,回調fallback函數查詢價格。由於self.D更新在轉帳之後,導致之前的價格獲取錯誤。移除流動性方法流程爲:1)銷毀用戶LP;2)發送用戶質押資金;3)更新self.D。

Jarvis Network閃電貸重入攻擊事件分析

self.D用於價格計算,添加流動性時也會更新。攻擊者的流動性資金較大,正常情況下self.D值會小很多。但攻擊者在步驟2進行重入,並以高於原始價格10倍的價格進行借貸。這是因爲self.D值在添加流動性時增大,而移除流動性時未及時更新。

Jarvis Network閃電貸重入攻擊事件分析

雖然remove_liquidity方法使用了@nonreentrant('lock')防止重入,但攻擊者重入進入其他合約借貸資金,使重入鎖失效。

Jarvis Network閃電貸重入攻擊事件分析

此次攻擊主要原因是變量修改邏輯在外部調用之後,導致價格獲取異常。跨合約重入使重入鎖失效。建議項目方進行嚴格的安全審計,將變量修改放在外部調用之前,採用多數據源的價格獲取方式。遵循"先判斷,後寫入變量,再進行外部調用"的編碼規範(Checks-Effects-Interactions)可以提高項目安全性和穩定性。

Jarvis Network閃電貸重入攻擊事件分析

Jarvis Network閃電貸重入攻擊事件分析

Jarvis Network閃電貸重入攻擊事件分析

Jarvis Network閃電貸重入攻擊事件分析

Jarvis Network閃電貸重入攻擊事件分析

Jarvis Network閃電貸重入攻擊事件分析

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 6
  • 分享
留言
0/400
梭哈一姐vip
· 19小時前
区块链又见暴雷 麻了
回復0
半佛薅羊毛vip
· 08-02 05:37
薅也薅不到这么多啊...
回復0
归零冲锋队长vip
· 08-02 05:37
又双叒叕阵亡一个,家底全打水漂了 亏钱奥特曼冲啊!
回復0
分叉自由主义者vip
· 08-02 05:29
手速这么慢 割肉跑路都晚了
回復0
StakeTillRetirevip
· 08-02 05:24
又一个重入惨案 自闭了
回復0
叹息出纳员vip
· 08-02 05:13
玩脱了吧 又是重入漏洞
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)