Risk Warning: Beware of illegal fundraising in the name of 'virtual currency' and 'blockchain'. — Five departments including the Banking and Insurance Regulatory Commission
Information
Discover
Search
Login
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
View Market
SlowMist released the analysis of Orion Protocol being hacked: the root cause is that the functions of the contract exchange function are not protected against re-entry
2023-02-03 07:43:42
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万美元;

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