零时科技 || SorraStaking 攻击事件分析

我们监控到多起针对 Ethereum 链上项目 Sorra 攻击事件,攻击共造成 41, 000 USD 的损失。

登链封面(事件).jpg

<!--StartFragment-->

背景介绍

2025年1月4日,我们监测到多起针对 Ethereum 链上项目 Sorra 攻击事件,攻击hash为:

https\://etherscan.io/tx/0x6439d63cc57fb68a32ea8ffd8f02496e8abad67292be94904c0b47a4d14ce90d

https\://etherscan.io/tx/0x03ddae63fc15519b09d716b038b2685f4c64078c5ea0aa71c16828a089e907fd

https\://etherscan.io/tx/0xf1a494239af59cd4c1d649a1510f0beab8bb78c62f31e390ba161eb2c29fbf8b

https\://etherscan.io/tx/0x09b26b87a91c7aea3db05cfcf3718c827eba58c0da1f2bf481505e0c8dc0766b

被攻击的项目为 Sorra ,攻击共造成 41, 000 USD 的损失。 

<!--EndFragment-->

<!--StartFragment-->

攻击及事件分析

2024年12月21日,攻击者通过 staking 来开始攻击前的准备,

<!--EndFragment-->

1.png <!--StartFragment-->

由于, staking 时选择的 _tier 为0, 根据合约,锁仓期限为14天,

<!--EndFragment-->

2.png

<!--StartFragment-->

14天后,也就是2025年1月4日攻击者开始攻击。攻击者通过 withdraw 中,使 _amount 为1。我们看一下 withdraw 函数的具体实现。 

<!--EndFragment-->

3.png <!--StartFragment-->

上述代码整体的逻辑如下,首选判断用户的 deposit 的资产是否到期,然后再计算 reward ,最后减去 position 。

首先看如何计算 reward; 

<!--EndFragment-->

4.png

<!--StartFragment-->

从代码中我们可以看出,计算 reward 是计算了所有到期的 deposit 的 reward ,这块看起来没有什么问题。

我们接下来看一下如何更新 position ;

<!--EndFragment-->

5.png

6.png

<!--StartFragment-->

在 updatePosition 中,由于没有设置 vaultExtension 所以直接到 _decreasePosition 函数中。在 _decreasePosition 函数中,仅仅是做了提取金额仓位减少操作。所以,漏洞就出现在这里,当用户 deposit 到期后,可以提取任意金额的存款,同时会提取到所有到期存款的 reward 。但是,由于没有判断 reward 是否已经被提取,所以会重复提取 reward 。

<!--EndFragment-->

<!--StartFragment-->

总结

本次漏洞的成因是 Sorra 项目方在用户 withdraw 时,没有判断用户是否已经提取过了 reward ,导致用户可以通过大量的操作重复提取 reward 。攻击者利用上述漏洞发起多次交易,将 Sorra 项目中的 SOR Token 全部提取。建议项目方在设计代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。

<!--EndFragment-->

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
零时科技
零时科技
0xbD0b...A354
专注区块链生态安全