🎉 攢成長值,抽華爲Mate三折疊!廣場第 1️⃣ 2️⃣ 期夏季成長值抽獎大狂歡開啓!
總獎池超 $10,000+,華爲Mate三折疊手機、F1紅牛賽車模型、Gate限量週邊、熱門代幣等你來抽!
立即抽獎 👉 https://www.gate.com/activities/pointprize?now_period=12
如何快速賺成長值?
1️⃣ 進入【廣場】,點擊頭像旁標識進入【社區中心】
2️⃣ 完成發帖、評論、點讚、發言等日常任務,成長值拿不停
100%有獎,抽到賺到,大獎等你抱走,趕緊試試手氣!
截止於 8月9日 24:00 (UTC+8)
詳情: https://www.gate.com/announcements/article/46384
#成长值抽奖12期开启#
Jarvis Network遭受閃電貸重入攻擊 損失663,101 MATIC
Jarvis Network項目遭遇閃電貸重入攻擊分析
2023年1月15日,Jarvis_Network項目遭受攻擊,損失663,101個MATIC。通過對攻擊交易的調用棧分析,發現存在重入邏輯。在重入過程中,對同一合約的同一函數調用,傳入參數相同,但返回值差異巨大。
重入發生在remove_liquidity函數中。該函數在移除流動性時會將用戶添加的代幣返回。由於Polygon與EVM同構,MATIC轉帳給合約時會觸發重入。
深入分析發現,問題出在getUnderlyingPrice函數的實現上。該函數涉及多個合約調用,最終影響get_virtual_price函數的返回值。get_virtual_price函數的返回值受self.D變量影響,而self.D的更新在轉帳之後進行。
攻擊者在移除流動性時,MATIC轉移到攻擊合約後,回調fallback函數查詢價格。由於self.D更新在轉帳之後,導致之前的價格獲取錯誤。移除流動性方法流程爲:1)銷毀用戶LP;2)發送用戶質押資金;3)更新self.D。
self.D用於價格計算,添加流動性時也會更新。攻擊者的流動性資金較大,正常情況下self.D值會小很多。但攻擊者在步驟2進行重入,並以高於原始價格10倍的價格進行借貸。這是因爲self.D值在添加流動性時增大,而移除流動性時未及時更新。
雖然remove_liquidity方法使用了@nonreentrant('lock')防止重入,但攻擊者重入進入其他合約借貸資金,使重入鎖失效。
此次攻擊主要原因是變量修改邏輯在外部調用之後,導致價格獲取異常。跨合約重入使重入鎖失效。建議項目方進行嚴格的安全審計,將變量修改放在外部調用之前,採用多數據源的價格獲取方式。遵循"先判斷,後寫入變量,再進行外部調用"的編碼規範(Checks-Effects-Interactions)可以提高項目安全性和穩定性。