慢雾发布Orion Protocol被黑分析:根本原因在于合约兑换功能的函数未做重入保护

2023/02/03 15:43

Odaily星球日报讯 据慢雾安全团队情报,2023年2月3日,Orion Protocol项目的ETH和BSC链上的合约遭到攻击,攻击者获利约302.7万美元。慢雾安全团队以简讯的形式分享如下:

1. 攻击者首先调用ExchangeWithAtomic合约的depositAsset函数进行存款,存入0.5枚USDC代币为下面的攻击作准备;

2. 攻击者闪电贷出284.47万枚USDT代币,接着调用ExchangeWithAtomic合约的doSwapThroughOrionPool函数兑换代币,兑换路径是[USDC -> ATK(攻击者创建的恶意代币)-> USDT];

3. 因为兑换出来的结果是通过兑换后ExchangeWithAtomic合约里的USDT代币余额减去兑换前该合约里的USDT代币余额(284.47万枚),但问题就在兑换USDC -> ATK后,会调用ATK代币的转账函数,该函数由攻击恶意构造会通过攻击合约调用ExchangeWithAtomic合约的depositAsset函数来将闪电贷来的284.4万USDT代币存入ExchangeWithAtomic合约中。此时攻击合约在ExchangeWithAtomic合约里的存款被成功记账为284.47万枚并且ExchangeWithAtomic合约里的USDT代币余额为568.9万枚,使得攻击者兑换出的USDT代币的数量被计算为兑换后的568.9万减去兑换前的284.47万等于284.47万;

4. 之后兑换后的USDT代币最后会通过调用库函数creditUserAssets来更新攻击合约在ExchangeWithAtomic合约里的使用的账本,导致攻击合约最终在ExchangeWithAtomic合约里USDT代币的存款记账为568.9万枚;

5. 最后攻击者调用ExchangeWithAtomic合约里的withdraw函数将USDT提取出来,归还闪电贷后将剩余的283.6万枚USDT代币换成WETH获利。攻击者利用一样的手法在BSC链上的也发起了攻击,获利19.1万美元;

此次攻击的根本原因在于合约兑换功能的函数没有做重入保护,并且兑换后再次更新账本存款的数值是根据兑换前后合约里的代币余额差值来计算的,导致攻击者利用假代币重入了存款函数获得超过预期的代币。

最新快讯
20:35
Magic Launchpad:首个IDO项目为TON生态永续DEX Storm Trade
20:28
BTC短线跌破67000 USDT,24H跌幅0.39%
20:27
ARB跌破1 USDT,24H跌幅2.48%
19:50
星球晚讯
19:16
截至5月18日Uniswap前端交易费用超2800万美元
推荐阅读