DAI:慢雾:Orion Protocol 被攻击是因合约兑换功能的函数没有做重入保护所致

今晨OrionProtocol项目的ETH和BSC链上的合约遭到攻击,攻击者获利约302.7万美元,对此次攻击过程和原因慢雾安全团队分析如下:

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

2.攻击者闪电贷出284.47万枚USDT代币,接着调用ExchangeWithAtomic合约的doSwapThroughOrionPool函数兑换代币,兑换路径是;

慢雾:警惕 Honeyswap 前端被篡改导致 approvals 到恶意地址风险:据慢雾区消息,Honeyswap官方推特发文,Honeyswap 前端错误导致交易到恶意地址 “0xD3888a7E6D6A05c6b031F05DdAF3D3dCaB92FC5B” ,目前官网仍未删除该恶意地址,请立即停止使用Honeyswap进行交易,到revoke.cash排查是否有approvals 交易到恶意地址,避免不必要的损失。[2022/5/10 3:03:22]

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

慢雾:警惕QANX代币的双花攻击风险:据慢雾区消息,近期存在恶意用户利用QANX代币的转账锁定、解锁功能(transferLocked/unlock)触发的事件记录与正常使用transfer功能转账触发的Transfer事件记录相同而进行双花攻击。

慢雾安全团队建议已上架此币种的平台及时自查,未上架的平台在对接此类币种时应注意以上风险。

QANX: 0xaaa7a10a8ee237ea61e8ac46c50a8db8bcc1baaa[2022/3/26 14:18:46]

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

慢雾:yearn攻击者利用闪电贷通过若干步骤完成获利:2021年02月05日,据慢雾区情报,知名的链上机池yearnfinance的DAI策略池遭受攻击,慢雾安全团队第一时间跟进分析,并以简讯的形式给大家分享细节,供大家参考:

1.攻击者首先从dYdX和AAVE中使用闪电贷借出大量的ETH;

2.攻击者使用从第一步借出的ETH在Compound中借出DAI和USDC;

3.攻击者将第二部中的所有USDC和大部分的DAI存入到CurveDAI/USDC/USDT池中,这个时候由于攻击者存入流动性巨大,其实已经控制CruveDAI/USDC/USDT的大部分流动性;

4.攻击者从Curve池中取出一定量的USDT,使DAI/USDT/USDC的比例失衡,及DAI/(USDT&USDC)贬值;

5.攻击者第三步将剩余的DAI充值进yearnDAI策略池中,接着调用yearnDAI策略池的earn函数,将充值的DAI以失衡的比例转入CurveDAI/USDT/USDC池中,同时yearnDAI策略池将获得一定量的3CRV代币;

6.攻击者将第4步取走的USDT重新存入CurveDAI/USDT/USDC池中,使DAI/USDT/USDC的比例恢复;

7.攻击者触发yearnDAI策略池的withdraw函数,由于yearnDAI策略池存入时用的是失衡的比例,现在使用正常的比例体现,DAI在池中的占比提升,导致同等数量的3CRV代币能取回的DAI的数量会变少。这部分少取回的代币留在了CurveDAI/USDC/USDT池中;

8.由于第三步中攻击者已经持有了CurveDAI/USDC/USDT池中大部分的流动性,导致yearnDAI策略池未能取回的DAI将大部分分给了攻击者9.重复上述3-8步骤5次,并归还闪电贷,完成获利。参考攻击交易见原文链接。[2021/2/5 18:58:47]

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

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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

[0:0ms0-0:688ms