TL;DR
由于激励池合约的 initialize 方法没有加上只能执行一次的限制,导致攻击者通过这个方法修改了合约的退款权限,将合约中 882 USDC 转走。
攻击过程分析
阿车在 2025-3-11 11:16:07(以下时间都是北京时间) 创建运营组激励池合约,创建合约的交易为:https://optimistic.etherscan.io/tx/0x5e400a4b58d2bc6b4a6cd9bd2605ffbedd79f1f95c2c11aca7950f7b90f91c82,激励池合约地址为:https://optimistic.etherscan.io/address/0x58717c5702bf611aeb8f4fd0a83ee32fc66078e8
然后经过国库在 2025-3-12 22:43:25 向激励池中转入 1800 USDC,交易为:https://optimistic.etherscan.io/tx/0x701518e762f1e1b73802191c99335d789084dfea99317b7f1a89da736d4d2cc5
激励池总共向 4 名 Builder 发放激励,其中两名分别在 2025-3-13 00:43:35 和 2025-03-13 10:41:19 完成激励的 Claim,激励池剩下 882 USDC。
攻击者在 2025-3-13 11:20:17 完成攻击合约的部署,交易为 https://optimistic.etherscan.io/tx/0x873527630b7c608507e12b7b656547a3b71086a36f2f3fc55dfb09efc85841fd,部署完成之后,向合约从充值了少量 eth。
然后在这笔交易中发起攻击:https://optimistic.etherscan.io/tx/0x61f97b5e1143eddc13379879eb4e771a20a7da78bfa5720450c6be855df7be73,通过这笔交易的状态变化可知,是在一笔交易中完成了对 initialize 方法的调用,并立即完成退款操作,导致合约中 882 USDC 被转走:
阿车在 2025-03-13 21:08 在 FS 开发群发出了这笔被攻击的交易,通过在线会议分析,在 2025-03-13 22:20 左右基本确定合约是被攻击了,随后阿车在活跃群让大家 claim 激励,并将无法立即 claim 的激励发起退款,最终确定损失 882 USDC。
后续处理方案
- 剩余没有 Claim 的激励已经通过 safe 多签发给个人
- FS 开发组会修复已经发现的安全问题,测试完成之后会重新部署代码和合约
- FS 开发组会对这个安全问题负责,后续安全的修复工作无法获取激励