超600万美元损失:针对Summer Finance的闪电贷攻击分析与被盗资金追棕

當前語言暫無此文章翻譯,已顯示原文。
7月6日,以太坊网络的DeFi收益聚合协议Summer Finance受到闪电贷攻击,损失超过600万美元。以下是Beosin安全团队对此次复杂攻击的详细分析与被盗资金流向追踪。

7月6日,以太坊网络的DeFi收益聚合协议Summer Finance受到闪电贷攻击,损失超过600万美元。以下是Beosin安全团队对此次复杂攻击的详细分析与被盗资金流向追踪。

攻击流程分析

攻击交易哈希:0x0db528c44f23fc7fa4544684a2fab81096450a14aae8bc89f42cd0592d43da12

攻击者地址:0x7bf716167b48cf527725722c6d79494b45b3bdca

攻击合约地址:0x0514F827C129C16418a0933E03C99A6AF982FC61

被攻击的合约地址:

0x98C49e13bf99D7CAd8069faa2A370933EC9EcF17

0xE9cDA459bED6dcfb8AC61CD8cE08E2D52370cB06 0xA9ca4909700505585B1aD2a1579dA3b670FFA9c4

金库结构分析:

用户存入 FleetCommander 的 USDC 存放于 BufferArk,然后被分配至各个 Ark,每个 Ark 封装一个外部收益来源:ERC4626Ark 封装通用 ERC-4626(如 sUSDS),MorphoVaultArk / MorphoV2VaultArk封装 Morpho MetaMorpho / Vault V2,SiloManagedVaultArk 封装 Silo SiloVault。

FleetCommander.totalAssets()是每个 ark 的 totalAssets() 之和,它是通过在存入/赎回开始时对每个 ark 进行快照进行计算。赎回首先从 buffer 开始,然后由 arks 提供,但上限为 maxRedeem = convertToShares(withdrawableTotalAssets()),即按流动性价值计算,而非账面价值。而本次被攻击的根本原因在于Ark 将捐赠的、缺乏流动性的份额计入资产。

function totalAssets() public view override returns (uint256 assets) {

uint256 shares = vault.balanceOf(address(this));

if (shares > 0) assets = vault.convertToAssets(shares);

以上代码存在两个缺陷:

1. 捐赠可计入 NAV

FleetCommander 存入/追踪的份额与 Ark 地址中实际持有的份额之间没有任何对账机制。仅仅通过ERC20.transfer 将底层份额转入一个 Ark,就会立即抬高该 Ark 的 totalAssets(),从而抬高 FleetCommander.totalAssets() 及其份额价格。

2. 无视流动性的估值

convertToAssets 报告的是 NAV 市场价值,即使底层金库无法兑现提现(maxWithdraw = 0)。捐赠的价值被全额入账,但实际不可赎回。

FleetCommander.deposit 和 redeem 均可在同一笔交易中调用,且各自获取全新的 NAV 快照。这使得攻击者可以在捐赠前以低价铸造份额,在捐赠后以高价销毁份额。

攻击流程

准备阶段:归集“Varlamore USDC Growth”金库份额代币,这些代币之后会在攻击交易中被捐赠给金库的 Silo Ark,以抬高金库的净值。

交易哈希:0x92d2e2e52d86e580b9dd40af737ed7671665753d96fed5143b4589eaf019dede

攻击阶段:

(1) 攻击者利用Morpho的闪电贷借入65,419,171.87999 USDC 和 1,000,000 USDT

(2) 攻击者将约 6480 万 USDC 存入金库Lazy Vault Lower Risk USDC(LVUSDC),以每股约 1.0665 USDC 的真实价格铸造股份。

(3) 他们通过将估值过高的外部资产(Silo Varlamore USDC Growth 代币)转移到 Silo Ark 中,人为地抬高了净值。

(4) 随后,他们以当时已上涨至约 1.1678 USDC/股的价格赎回了股份,获得约 7100 万 USDC。这笔资金来自金库的实际流动资产(缓冲资产加上流动 Morpho、Spark 和 Sky Arks),也就是其他存款人的资金。攻击结束后,金库大部分流动性被攻击者提取,其中只剩下被捐赠的、无法变现的SiloVault份额。

资金流向分析

攻击得手后,攻击者收到$6.01M DAI。7月8日,约114万DAI被兑换成ETH。其中634.92 ETH被转移至地址0x46e09c4d4d20c0474598b4d2ffdd08bdf416eba7,当日总共600 ETH被转移到Tornado Cash。

7月9日,地址0x46e09继续向Tornado Cash转移100 ETH。目前,约487万DAI仍存放在地址0x7bf716167b48cf527725722c6d79494b45b3bdca。

分析地址0x7bf7此前的资金来源,其ETH资金来源于FixedFloat,随后通过Stargate Finance跨链协议将资金从Arbitrum跨至Ethereum,静默2个月后在7月6日发起了闪电贷攻击。资金流向图如下所示:

结语

这是一次非常复杂的闪电贷攻击,其根本漏洞在于金库在计算资产价值时假设/默认可被捐赠操纵且无视流动性。对于类似的金库代码,项目方需检查每个金库是如何计算资产价值的,它是否会被简单的代币转账/捐赠操纵,是否对缺乏流动性的底层资产进行折价,以及存入和赎回是否可在同一区块内组合。

拓展阅读:

安全审计系列(一) | Solidity语言闪电贷安全风险研究

Web3技术研究 | Solidity闪电贷实现方式与Move以及Rust闪电贷实现方式有何不同?

闪电贷攻击如何防范?Avalanche链上Platypus项目损失850万美元攻击事件分析

Beosin作为全球最早一批从事形式化验证的区块链安全公司,主打”安全+合规“全生态业务,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控与阻断、被盗追回、虚拟资产反洗钱(AML)以及符合各地监管要求的合规评估等“一站式”区块链合规产品+安全服务。欢迎点击公众号留言框,与我们联系。

分享至:

作者:Beosin

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:Beosin如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
PANews APP
FTX債權人代表Sunil:下一輪資金分配預計7月31日,分配額約6億美元
PANews 快訊