# Jarvis Network遭受闪电贷重入攻击分析2023年1月15日,Jarvis_Network项目遭遇了一次重大攻击事件,造成663,101枚MATIC的损失。这次攻击利用了闪电贷和重入攻击的组合手法,暴露了项目合约中的严重漏洞。攻击者巧妙地利用了remove_liquidity函数中的一个漏洞。该函数在移除流动性时会返还用户添加的代币。由于Polygon链与EVM兼容,当MATIC转账给合约时,就会触发合约的重入逻辑。分析发现,攻击的关键在于getUnderlyingPrice函数的调用。这个函数在重入前后返回了显著不同的价格:重入前为1002157321772769944,重入后则高达10091002696492234934,相差近10倍。问题的根源在于合约更新self.D变量的时机不当。remove_liquidity函数的执行顺序是:1) 销毁用户LP代币;2) 发送质押资金给用户;3) 更新self.D。攻击者在第二步进行了重入,利用尚未更新的self.D值获取了错误的价格信息,从而进行了有利可图的借贷操作。虽然remove_liquidity函数使用了@nonreentrant('lock')装饰器来防止重入,但由于攻击涉及跨合约操作,这个防护措施未能奏效。这次事件凸显了几个关键的安全原则:1. 变量修改应在外部调用之前完成,以防止状态不一致。2. 价格获取机制应采用多数据源方式,增强可靠性。3. 代码逻辑应遵循"检查-生效-交互"(Checks-Effects-Interactions)模式,即先进行条件检查,然后修改状态变量,最后才进行外部调用。此次攻击再次证明,智能合约的安全审计至关重要。项目方应该更加重视合约的安全性,确保代码经过全面严格的审核,以防范类似漏洞的出现。
Jarvis Network遭闪电贷重入攻击 损失66万MATIC
Jarvis Network遭受闪电贷重入攻击分析
2023年1月15日,Jarvis_Network项目遭遇了一次重大攻击事件,造成663,101枚MATIC的损失。这次攻击利用了闪电贷和重入攻击的组合手法,暴露了项目合约中的严重漏洞。
攻击者巧妙地利用了remove_liquidity函数中的一个漏洞。该函数在移除流动性时会返还用户添加的代币。由于Polygon链与EVM兼容,当MATIC转账给合约时,就会触发合约的重入逻辑。
分析发现,攻击的关键在于getUnderlyingPrice函数的调用。这个函数在重入前后返回了显著不同的价格:重入前为1002157321772769944,重入后则高达10091002696492234934,相差近10倍。
问题的根源在于合约更新self.D变量的时机不当。remove_liquidity函数的执行顺序是:1) 销毁用户LP代币;2) 发送质押资金给用户;3) 更新self.D。攻击者在第二步进行了重入,利用尚未更新的self.D值获取了错误的价格信息,从而进行了有利可图的借贷操作。
虽然remove_liquidity函数使用了@nonreentrant('lock')装饰器来防止重入,但由于攻击涉及跨合约操作,这个防护措施未能奏效。
这次事件凸显了几个关键的安全原则:
此次攻击再次证明,智能合约的安全审计至关重要。项目方应该更加重视合约的安全性,确保代码经过全面严格的审核,以防范类似漏洞的出现。