坚不可摧Damn Vulnerable Defi V4 解决方案系列

本文分析了Damn Vulnerable Defi V4挑战中的Unstoppable Vault漏洞。

C1: 不可阻挡。极其脆弱的 Defi V4 解决方案系列

让我们看一下挑战声明:

所以,总结一下:

  1. 这里有一个 vault (一种持有数字资产的合约)。
  2. 这个 vault 用于提供 闪电贷(如果你不熟悉这个术语,请查看来自 Whiteboard Crypto 的这些资源 https://www.youtube.com/watch?v=YiF6x193fRk&t=1s我们亲爱的 Cyfrin 团队的 Patrick https://updraft.cyfrin.io/courses/security/thunder-loan/what-is-flash-loan)。
  3. 开发者决定在测试网上运行一个 beta 版本,这样他们就可以捕获任何可能存在的 bug。为了使事情更容易,他们创建了一个 monitor 合约,该合约拥有 vault,并且能够在出现问题时停止闪电贷功能。
  4. 我们的目标是 停止闪电贷功能,这意味着,使任何用户都无法请求闪电贷。

话不多说... 让我们开始破解吧😀!!

基本侦察

这个闪电贷系统有两个主要合约,UnstoppableVault.solUnstoppableMonitor.sol

UnstoppableVault.sol 是系统的核心。这是持有资产并执行闪电贷逻辑的 vault。它继承自一些合约:

另一个合约是 UnstoppableMonitor.sol,是一个负责监控 UnstoppableVault.sol 行为的合约。它继承自 IERC3156FlashBorrower,这意味着它可以接收闪电贷。因此,它有一个 "onFlashLoan" 函数和一个 "checkFlashLoan" 函数,看起来非常诱人🧃

这个 "checkFlashLoan" 函数有一个 try/catch 块。它尝试从 UnstoppableVault.sol 合约请求闪电贷。如果它工作正常,它会发出一个事件,表明一切正常。但是,如果闪电贷交易由于任何原因失败,则执行 catch 块。在这个 catch 块中,我们调用 UnstoppableVault.sol 的 pause 函数,停止闪电贷功能!!

因此,如果我们找到一种方法使闪电贷失败,这个 catch 块将被执行,我们将实现我们的目标。

UnstoppableVault.sol 合约中 -> 在 "flashLoan" 函数中,我们在函数的开头有一系列条件:

 if (amount == 0) revert InvalidAmount(0); // 尽早失败
 if (address(asset) != _token) revert UnsupportedCurrency(); // 强制执行 ERC3156 要求
 uint256 balanceBefore = totalAssets();
 if (convertToShares(totalSupply) != balanceBefore) revert InvalidBalance(); // 强制执行 ERC4626 要求

让我们关注最后一个:

if (convertToShares(totalSupply) != balanceBefore) revert InvalidBalance();

这里我们有两个重要的术语:assetsshares

  • assets,代表基础代币(DVT,用户存入和从 vault 中提取的代币,也就是 vault 持有的加密货币)。
  • shares,是每次用户存款时给予用户的代币,代表他们拥有的已存入资产总额的比例。

为了计算 shares,合约使用的是 ERC-4626 的 "convertToShares" 函数,该函数根据输入中传递的资产数量返回相应的 shares。

因此,这个条件所做的是评估底层代币的数量必须与 share 代币的数量相同。

漏洞

如果我们直接将 DVT transfer 到 vault,而不是通过调用 "deposit" 函数来做,我们会增加合约的底层金额,而不会铸造新的 share 代币。这将使条件 (convertToShares(totalSupply) != balanceBefore) 为真,并随后执行条件内的 revert 行。

因此,当 monitor 尝试进行闪电贷时,交易将 revert,触发 check 函数上的 catch 块并停止 vault。

因此,只需一行代码,我们就可以利用该系统:

就是这样。

感谢阅读,祝你黑客愉快,我的朋友!!

  • 原文链接: blog.blockmagnates.com/u...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
blockmagnates
blockmagnates
江湖只有他的大名,没有他的介绍。