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

2024-03-06 09:53 0 比特币

北京时间2024年2月28日,据Beosin trace资金分析平台显示,ETH链上的SenecaUSD项目合约存在漏洞,黑客利用精心构造的calldata参数,调用transferfrom将授权到该项目合约的代币转移到自己地址上,最后兑换为ETH。目前黑客已归还80%资金,剩余20%用作白帽奖励。以下是Beosin对此次攻击事件的分析。

漏洞分析

Seneca项目合约中存在一个performOperations函数,该函数传入的参数来选择执行不同的函数逻辑。

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

可以看到,当用户指定action为30时,函数将选择调用_call函数,并且传入用户指定的调用参数。

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

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

_call函数只检查了一下调用地址的黑名单,随后便直接调用了用户指定地址的指定函数,期间并未对调用者以及调用参数做任何限制性检查。

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

如果调用者在这里构造非法的调用数据,便可能导致攻击事件的发生。

攻击流程

本次事件攻击者通过多次相同的手法进行攻击,这里以0x23fcf9d4517f7cc39815b09b0a80c023ab2c8196c826c93b4100f2e26b701286这笔交易为例。我们来看看此次攻击者是如何构造调用数据以及实施攻击的。

1. 攻击者直接调用performOperations函数,并构造了以下参数,其中actions传入了上述的30,将调用_call函数。

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

2. Datas数据为:

0x000000000000000000000000b05cabcd99cf9a73b19805edefc5f67ca5d1895e

00000000000000000000000000000000000000000000000000000000000000a0

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000000

0000000000000000000000000000000000000000000000000000000000000064

23b872dd0000000000000000000000009cbf099ff424979439dfba03f00b5961

784c06ce00000000000000000000000094641c01a4937f2c8ef930580cf39614

2a2942dc00000000000000000000000000000000000000000000004b180b8661

8eddc3ab00000000000000000000000000000000000000000000000000000000

根据解析规则来看,第一个32字节为callee=0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e。

第二个callData在a0处,100(0x64)字节,则得到

callData为:

0x23b872dd0000000000000000000000009cbf099ff424979439dfba03f00b5961784c06ce00000000000000000000000094641c01a4937f2c8ef930580cf396142a2942dc00000000000000000000000000000000000000000000004b180b86618eddc3ab

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

3. 查询函数选择器,根据callData数据可知,callData指定的是transferFrom函数。那本次调用我们可以解析出来为:

0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e.transferFrom(0x9cbf099ff424979439dfba03f00b5961784c06ce,0x94641c01a4937f2c8ef930580cf396142a2942dc,1385238431763437306795)。

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

4. 由于在之前的交易中,0x9cbf099ff424979439dfba03f00b5961784c06ce向0x65c210c59b43eb68112b7a4f75c8393c36491f06地址授权过最大值,所以这里攻击者通过transferFrom函数直接将0x9cbf099ff424979439dfba03f00b5961784c06ce的超1385枚PT-rsETH-27JUN2024(0xb05cabcd99cf9a73b19805edefc5f67ca5d1895e)代币转移到自己的地址上

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

5. 随后攻击者将PT-rsETH-27JUN2024代币兑换为ETH。

资金追踪

在被攻击后,Seneca部署者向攻击者喊话,要求攻击者归还资金,并表示可以保留20%的资金作为白帽奖励。

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

据Beosin trace资金追踪平台显示,截止发稿,攻击者已将被盗1900多枚ETH中的1537枚ETH(80%)归还到部署者指定地址,剩余370枚ETH(20%)分散保留在攻击者地址上。

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

本站登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不构成投资建议。投资者据此操作,风险自担。