# 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生態系統提供更可靠的基礎設施。