返回博客

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

Code Auditing
2022年5月18日
阅读约 6 分钟

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的闪电贷,并将部分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合约批准了伪造的path,approve操作是基于用户balances2会立即减少的事实(swapToSwap函数第684行),也就是说,已批准的资金来自第3步中存入的确切金额。换句话说,攻击者只是将他/她自己的存款批准给伪造的path。之后,由于balances2的减少,攻击者不应该再为其他伪造的path进行批准。

因此,这里就提出了一个问题:攻击者究竟使用了什么技巧来进行其他批准以获取额外利润?

0x2.2 高级攻击分析

为了回答这个问题,我们回到swapToSwap函数。 仔细检查代码后,我们发现这里使用的技巧不仅是伪造path,还包括伪造swap,这导致受害者合约余额的实际值和记录值之间不一致。结果,这种不一致性可以被用来通过调用depositInternal函数来恢复攻击者的存款金额,从而重复进行批准。

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

由于传递给swapToSwap的path地址是由攻击者控制的伪造path,因此实际上并没有发生任何转账。结果,Main.balanceOf的返回值保持与步骤3相同。请注意,_totalSupply2已在swapToSwap函数中减少。只要攻击者进行存款,增加的balance2将不可避免地大于实际存款金额。

因此,在步骤4中,攻击者首先通过调用depositInternal函数恢复存款金额,然后通过调用swapToSwap函数执行批准和伪造的swap。 请注意,攻击者使用的存款金额仅为几乎为零(即1 / 1e18)fBNB,因此,如上所述,depositInternal函数会将攻击者的balances2恢复到与步骤3几乎相同的金额(这也通过下一次批准的跟踪得到证明)。

通过重复执行步骤4,攻击者可以扩大收益。

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

0x3 根本原因

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

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

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

0x4 其他相关攻击

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

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

0x5 经验教训

确保DeFi项目的安全并非易事。除了代码审计,我们认为社区应该采取主动的方式来监控项目状态,并在攻击发生之前阻止它(https://blocksec.com/phalcon)。

关于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

订阅最新动态
Autheo Network、UNCX 遭黑客攻击,损失约387万 USD | BlockSec 周报
Security Insights

Autheo Network、UNCX 遭黑客攻击,损失约387万 USD | BlockSec 周报

本周报告涵盖 2026年10月12日–2026年10月18日 期间的 3 起安全事件,估计总损失约为 387万 USD。Autheo Network 因私钥泄露损失约 176万 USD,Qubic Wallet 因种子生成机制薄弱损失约 130万 USD;UNCX Network 在 Ethereum、BNB Chain、Base 和 Robinhood Chain 上的 Smart Token Vesting V2 合约因会计核算错误损失约 80.7万 USD。重点分析的 UNCX 事件说明,有缺陷的总份额计算将按不同代币与份额兑换比率创建的归属批次混合计算,从而使人能够从共享资金池超额提取。

损失约54.2万美元:MakerDaoBot 漏洞利用事件|BlockSec 周报
Security Insights

损失约54.2万美元:MakerDaoBot 漏洞利用事件|BlockSec 周报

本报告涵盖2026/10/05至2026/10/11以太坊上的1起安全事件,估计损失约54.2万美元。攻击合约部署恶意适配器,并将其传入缺乏访问控制的MakerDaoBot函数,使机器人授予该适配器操作其内部MakerDAO余额的权限。适配器结算了4笔旧版ETH-A拍卖,将200单位ETH-A抵押品兑换为WETH;攻击合约随后将其解包,并向攻击者转出200 ETH。

损失约4.18亿美元:Bitget、NEAR Intents遭利用攻击 | BlockSec Weekly
Security Insights

损失约4.18亿美元:Bitget、NEAR Intents遭利用攻击 | BlockSec Weekly

本双周安全报告记录了2026年9月21日至10月4日期间发生的八起事件,涉及以太坊、BNB Chain、Solana、比特币、波场、XRP Ledger、Zcash、Avalanche、NEAR等网络,损失约4.184亿美元。详细分析涵盖Bitget因第三方安全产品漏洞损失3.875亿美元,以及NEAR Intents因退款验证缺陷和状态回滚缺失损失387万美元。

Web3 最佳安全审计方

在上线之前验证设计、代码与业务逻辑,对标业内最高安全标准。

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