FEGtoken安全事件分析:细节决定成败

一项微妙的合同漏洞如何导致了跨多个区块链的数百万美元 FEGtoken 盗窃案

FEGtoken安全事件分析:细节决定成败

2022年5月15日,UTC时间约晚上8:20,我们的监控系统检测到FEGtoken项目中的FEGexPRO合约遭到黑客攻击。 攻击者在ETH和BSC主网上发起了一系列攻击,涉及的总价值累积约130万美元(根据项目方发送的链上消息)。

有关此事件的更多信息可以在该项目的官方Twitter上找到。 在本报告中,我们将深入探讨细节,揭示此次事件的根本原因。

0x1 漏洞分析:初步观察

易受攻击的FEGexPRO合约部署在ETH和BSC上,易受攻击的合约函数是swapToSwap,如下所示:

正如在社交媒体上指出的那样,swapToSwap函数第一个名为path的参数可以由函数调用者指定。因此,攻击者可以利用它进行任意授权(参见swapToSwap函数第682行)。

到目前为止,这并没有什么新东西,因为它又是参数未经验证的又一个案例。然而,攻击路径表明,仅归因于任意授权无法清楚地说明这次攻击。事实上,存在一个微妙的技巧,这才是事情变得有趣的地方。

0x2 攻击分析

0x2.1 初步攻击分析

我们以BSC上的一次攻击交易为例来说明攻击过程,相应的攻击路径,目标资产为fBNB,总结如下:

  • 步骤1:准备资金和假path。攻击者从DVM借入约915 BNB的闪电贷,并将其中一部分兑换成116 fBNB。然后,攻击者创建了一堆将被用作假path的合约。
  • 步骤2:存入初始资金。通过将115 fBNB存入FEGexPRO合约,攻击者增加了其在受害者合约中的balances2
  • 步骤3:执行任意授权。攻击者随后调用swapToSwap函数,并将一个假的path作为第一个参数传入,导致FEGexPRO合约批准path花费114 fBNB。
  • 步骤4:通过调用depositInternal函数和swapToSwap函数进行另一项授权。FEGexPRO合约又批准了一个path花费114 fBNB。

攻击者反复执行步骤4以进行更多授权。最后,攻击者使用已授权的假path耗尽FEGexPRO的所有fBNB,并兑换部分BNB用于偿还闪电贷。

显然,我们可以轻松地看出,合约绝对应该检查path参数。

然而,要完全理解这次攻击,还需要解决一个问题:即使FEGexPRO合约批准了假的pathapprove操作是基于用户balances2会立即减少(swapToSwap函数第684行)这一事实,即已授权的资金来自步骤3中确切存入的金额。换句话说,攻击者只是将自己存入的资金授权给了假的path。在此之后,由于balances2的减少,攻击者不应该为其他假的path进行授权。

因此,问题 arises:攻击者到底用了什么技巧来进行其他授权以获取额外利润?

0x2.2 高级攻击分析

为了回答这个问题,我们回到swapToSwap函数。 仔细检查代码后,我们发现这里使用的技巧不仅是假的path,还有一个假的swap,这导致了受害者合约余额的实际值与记录值之间存在不一致。因此,这种不一致性可以用来通过调用depositInternal函数来恢复攻击者的存款金额,从而反复进行授权。

具体来说,depositInternal函数主要根据合约的Main.balanceOf_totalSupply2之间的差值来修改用户的balances2depositInternal函数第651行)。

由于传递给swapToSwappath地址是一个由攻击者控制的假path,实际上并没有发生任何转账。因此,Main.balanceOf的返回值与步骤3中的情况保持不变。请注意,_totalSupply2swapToSwap函数中已经被减少了,只要攻击者进行存款,增加的balance2将不可避免地大于实际存入的金额。

因此,在步骤4中,攻击者首先通过调用depositInternal函数来恢复存款金额,然后通过调用swapToSwap函数执行授权和假的swap。 请注意,攻击者使用的存款金额仅为几乎0(即1 / 1e18)fBNB,因此depositInternal函数将攻击者的balances2恢复到与步骤3中几乎相同的金额(正如下一个授权的追踪所示)。

攻击者可以通过反复执行步骤4来扩大收获。

最后,值得注意的是,我们上面描述的攻击只是攻击者利用的攻击路径之一。就在同一次攻击交易中,攻击者还瞄准了FEG资产:

0x3 根本原因

在此,我们总结了此次攻击的根本原因:

  • 首先,swapToSwap函数中未经验证的参数导致了任意授权
  • 其次,由于swapToSwap函数中的假swap,导致受害者合约余额的实际值与记录值之间存在不一致。这被用来通过恢复攻击者的存款金额来反复进行授权。

将两者结合起来,攻击者成功地从受害者合约中耗尽了所有资金。

0x4 其他相关攻击

截至本报告撰写之时,我们还观察到另一名攻击者发起的更多相关攻击。

同样,在以太坊和BSC上部署的合约都遭到了攻击。 有趣的是,攻击路径与我们刚才讨论的有所不同。尽管受害者合约并未开源,但我们高度怀疑攻击者利用了相同的漏洞,并采用了类似的攻击方法。

0x5 启示

使DeFi项目安全并非易事。除了代码审计,我们认为社区应采取主动措施来监控项目状态,并在攻击发生之前进行阻止

关于BlockSec

BlockSec是一家开创性的区块链安全公司,由一群全球杰出的安全专家于2021年创立。公司致力于为新兴的Web3世界增强安全性和可用性,以促进其大规模采用。为此,BlockSec提供智能合约和EVM链安全审计服务,用于安全开发和主动阻止威胁的Phalcon平台,用于资金追踪和调查的MetaSleuth平台,以及供Web3开发者在加密世界高效冲浪的MetaDock扩展。

迄今为止,该公司已为MetaMask、Uniswap Foundation、Compound、Forta和PancakeSwap等300多家知名客户提供服务,并在两轮融资中获得了来自Matrix Partners、Vitalbridge Capital和Fenbushi Capital等知名投资者的数千万美元。

官方网站:https://blocksec.com/ 官方Twitter账号:https://twitter.com/BlockSecTeam

Sign up for the latest updates