校验缺失损失超 370 枚 ETH
封面:Photo by Caspar Camille Rubin on Unsplash
北京时间 2024 年 2 月 28 日,据 Beosin trace 资金分析平台显示,ETH 链上的 SenecaUSD 项目合约存在漏洞,黑客利用精心构造的 calldata 参数,调用 transferfrom 将授权到该项目合约的代币转移到自己地址上,最后兑换为 ETH。目前黑客已归还 80% 资金,剩余 20% 用作白帽奖励。以下是 Beosin 对此次攻击事件的分析。
漏洞分析
Seneca 项目合约中存在一个 performOperations 函数,该函数传入的参数来选择执行不同的函数逻辑。
可以看到,当用户指定 action 为 30 时,函数将选择调用_call 函数,并且传入用户指定的调用参数。
_call 函数只检查了一下调用地址的黑名单,随后便直接调用了用户指定地址的指定函数,期间并未对调用者以及调用参数做任何限制性检查。
如果调用者在这里构造非法的调用数据,便可能导致攻击事件的发生。
攻击流程
本次事件攻击者通过多次相同的手法进行攻击,这里以 0x23fcf9d4517f7cc39815b09b0a80c023ab2c8196c826c93b4100f2e26b701286 这笔交易为例。我们来看看此次攻击者是如何构造调用数据以及实施攻击的。
1. 攻击者直接调用 performOperations 函数,并构造了以下参数,其中 actions 传入了上述的 30,将调用_call 函数。
2. Datas 数据为:
0x000000000000000000000000b05cabcd99cf9a73b19805edefc5f67ca5d1895e
00000000000000000000000000000000000000000000000000000000000000a0
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000064
23b872dd0000000000000000000000009cbf099ff424979439dfba03f00b5961
784c06ce00000000000000000000000094641c01a4937f2c8ef930580cf39614
2a2942dc00000000000000000000000000000000000000000000004b180b8661
8eddc3ab00000000000000000000000000000000000000000000000000000000
根据解析规则来看,第一个 32 字节为 callee=0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e。
第二个 callData 在 a0 处,100(0x64) 字节,则得到
callData 为:
0x23b872dd0000000000000000000000009cbf099ff424979439dfba03f00b5961784c06ce00000000000000000000000094641c01a4937f2c8ef930580cf396142a2942dc00000000000000000000000000000000000000000000004b180b86618eddc3ab
3. 查询函数选择器,根据 callData 数据可知,callData 指定的是 transferFrom 函数。那本次调用我们可以解析出来为:
0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e.transferFrom(0x9cbf099ff424979439dfba03f00b5961784c06ce,0x94641c01a4937f2c8ef930580cf396142a2942dc,1385238431763437306795)。
4. 由于在之前的交易中,0x9cbf099ff424979439dfba03f00b5961784c06ce 向 0x65c210c59b43eb68112b7a4f75c8393c36491f06 地址授权过最大值,所以这里攻击者通过 transferFrom 函数直接将 0x9cbf099ff424979439dfba03f00b5961784c06ce 的超 1385 枚 PT-rsETH-27JUN2024(0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e) 代币转移到自己的地址上。
5. 随后攻击者将 PT-rsETH-27JUN2024 代币兑换为 ETH。
资金追踪
在被攻击后,Seneca 部署者向攻击者喊话,要求攻击者归还资金,并表示可以保留 20% 的资金作为白帽奖励。
据 Beosin trace 资金追踪平台显示,截止发稿,攻击者已将被盗 1900 多枚 ETH 中的 1537 枚 ETH(80%) 归还到部署者指定地址,剩余 370 枚 ETH(20%) 分散保留在攻击者地址上。
免责声明:作为区块链信息平台,本站所发布文章仅代表作者及嘉宾个人观点,与 Web3Caff 立场无关。文章内的信息仅供参考,均不构成任何投资建议及要约,并请您遵守所在国家或地区的相关法律法规。