返回博客

Mirror Protocol 如何被利用

Code Auditing
2022年5月31日
阅读约 4 分钟

据@FatMan报道,Mirror Protocol 遭受了黑客攻击。这篇博客对此有很好的报道。在这篇短文中,我们将使用攻击交易来详细说明这是如何发生的。

免责声明:本文基于公开交易以及我们对 Mirror Protocol 和 Terra 生态系统的理解。如果有任何不准确之处,请告知我们。欢迎对本博客提出任何意见。

1. 攻击

1.1. 准备

该交易用于准备攻击。

步骤 1: 在此交易中,攻击者首先向锁定合约发送了 100,000 USTC。这并非开仓的必要条件,但对攻击至关重要。

步骤 2: 之后,攻击者通过存入 10 USTC 作为抵押品并指定抵押率 (collateral_ratio) 为 2.5 来开仓。

指定了 short_params,以便铸币合约将铸造的 mAssets(即 mETH)进行出售,并将获得的 USTC 添加到仓位的锁定金额中。

步骤 2.1: 让我们一步一步地了解交易。首先,将调用 open_position 函数来打开一个 ID 为 43186 的空头仓位。

步骤 2.2: 由于添加了可选的 short_params,合约将首先根据当前 ETH 价格铸造 0.001208 mETH,然后通过在 mETH-UST Pair 中进行兑换来出售。

步骤 2.3: 0.001208 mETH 将被兑换成 4.06582 USTC。兑换的 USTC 在扣除相关费用(例如税费)后将发送到锁定合约。这是因为开仓的仓位只能在一段时间后解锁。

步骤 2.4: 接着将调用 lock_position_funds_hook。在此函数中,通过查询 current_balance 并将 current_balance 与 locked_funds 进行比较来计算 position_locked_amount。

然而,正如我们在步骤 1 中看到的,100,000 USTC 已直接转入锁定合约,因此 locked_amount 将约为 100,004 USTC,而不是 4 USTC。

步骤 2.5: 最后,将调用 increase_short_token 来记录 sLP 代币。

至此,攻击者通过直接向锁定合约发送 100,000 USTC 并以 10 USTC 作为抵押品,开了一个仓位。该仓位的锁定金额约为 100,004 USTC,并可在一段时间后解锁。攻击者通过发送 1,000 到 100,000 USTC,开立了许多此类仓位。

1.2. 攻击

Mirror Protocol 不会检查仓位 ID 的重复性。在这种情况下,攻击者可以反复提交许多重复的仓位 ID 来解锁一个仓位中的锁定金额。

该交易是攻击交易。 例如,对于仓位 ID 43186,攻击者重复了 437 次。

由于原始合约代码没有检查重复性,在这次单次函数调用中,约有 43.7M (437 * 0.1M)USTC 被解锁。

请注意,其他仓位也通过相同的机制被解锁。

2. Bug 修复

该漏洞已在此提交中修复。

具体来说,unlockable_positions 是一个包含待解锁仓位 ID 的向量。在原始代码中,没有检查 unlockable_positions 中是否存在重复的 ID。修补后的代码添加了对仓位 ID 重复性的检查。

3. 结论

正如 @FatMan 和其他社区成员指出的那样,此 bug 已存在数月并在野外被利用。我们认为,对已被利用的漏洞进行悄无声息的修复并不是一种好的安全实践。此外,我们也认为高知名度的 DeFi 项目应该部署一些守门员,主动监控其应用程序的状态,并在出现异常情况时发出警报。

订阅最新动态
损失约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万美元。

Bitget 3.875亿美元链下漏洞事件:不止于密钥与合约
Security Insights

Bitget 3.875亿美元链下漏洞事件:不止于密钥与合约

2026年9月24日,攻击者利用第三方安全产品漏洞,获取内部凭证并伪造提现指令,导致Bitget部分运营钱包资金转出约3.875亿美元,涉及以太坊、其他EVM网络、XRP Ledger、Zcash和TRON,私钥及冷钱包未受影响。本文梳理事件路径与资金流向,分析资产快速转换及生态恢复应对,提出机构纵深防御体系,并说明授权区块链渗透测试如何验证跨层安全假设。

损失约1130万美元:Multicall Router、Nostra | BlockSec Weekly
Security Insights

损失约1130万美元:Multicall Router、Nostra | BlockSec Weekly

本报告覆盖2026/09/14至09/20,分析以太坊与Starknet上两起共约1130万美元损失的安全事件。较大一起中,多重调用路由器将自身地址当作调度目标,致嵌套调用以路由器已授权身份而非外部调用者身份进入Safe钱包的Gateway模块,约2900个aEthrsETH被转入攻击者创建的Uniswap v4池。Starknet上,Nostra预言机仅需一个聚合来源,三个价格源中仅两个参与聚合时,被操纵的浅池报价与正常报价平均,使NSTR估值约49.52美元,支持约350万美元超额抵押借贷。

Web3 最佳安全审计方

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

BlockSec 审计