校验缺失 —— 借贷项目 SenecaUSD 安全事件分析

Beosin
Beosin 机构得得号

Mar 04 Beosin是总部位于新加坡的全球知名区块链安全公司,为区块链生态提供代码安全审计,安全风险监控、预警与阻断,虚拟资产被盗追回,KYT/AML等“一站式”安全产品+服务,已为全球2000多个区块链企业服务,保护客户资产5000多亿美元。

摘要: 目前黑客已归还80%资金,剩余20%用作白帽奖励。以下是Beosin对此次攻击事件的分析。

北京时间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%)分散保留在攻击者地址上。

链得得仅提供相关信息展示,不构成任何投资建议
本文系作者 Beosin 授权链得得发表,并经链得得编辑,转载请注明出处、作者和本文链接

更多精彩内容,关注链得得微信号(ID:ChainDD),或者下载链得得App

分享到:

相关推荐

    评论(0

    Oh! no

    您是否确认要删除该条评论吗?

    分享到微信