主页 > tronlink钱包下载iOS > 波宝pro|慢雾:Orion Protocol 被黑分析

波宝pro|慢雾:Orion Protocol 被黑分析

佚名 tronlink钱包下载iOS 2023年02月03日

碳链价值APP讯,据慢雾安全团队情报,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 万美元;

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


TinTinLand 作为一个关注 Web3 各大生态和公链的开发者社区,在 2022 年以公链为观察视角,输出了多篇文章,旨在帮助开发者研究现有的公链市场格局以及不同公链的特性,从而共同定义和共建 Web3 未来。
及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。
及时、全面、专业、准确的资讯与数据,致力于为区块链爱好者以及数字货币投资者提供最好的服务。
标签: