MO - 单一功能的双重弱点

本文为机器翻译
展示原文

OPTIMISTIC 中一个正在运行的项目(主代币名为 MO)于 2024 年 3 月 14 日被利用,损失约 41.3 万美元。被利用的合约在函数中存在两个弱点,攻击者可从 Loan 和 Pair 合约中窃取USDT 。

概述

攻击者: https://optimistic.etherscan.io/address/0x4e2c6096985e0b2825d06c16f1c8cdc559c1d6f8

脆弱合约:

https://optimistic.etherscan.io/地址/0xae7b6514af26bcb2332fea53b8dd57bc13a7838e

交易攻击: https://optimistic.etherscan.io/tx/0x4ec3061724ca9f0b8d400866dd83b92647ad8c943a1c0ae9ae6c9bd1ef789417

感谢阅读 Verichains!免费订阅以接收新帖子并支持我的工作。

漏洞分析

攻击交易之后,攻击过程非常简单:利用循环借入USDT并立即赎回。通过在同一笔交易中多次重复此过程,攻击者成功借入大量USDT ,并同时交换 MO 代币以获取该对中的更多USDT 。

调查借用函数:

使用借贷功能时,用户需要存入一定数量的借贷代币作为抵押。可借入的供给代币数量取决于抵押金额和市场价格。此外,该对中的借贷代币数量也会被销毁(发送到 BURN 地址)以提高市场价格。

深入了解兑换功能:

赎回函数根据经过的时间计算利息,但时间戳只会在The Block增加时增加。因此,如果用户在单个区块内赎回余额,则不会产生任何费用。

从上述函数推导出来的逻辑可以看出,如果我们立即借入并赎回,市场价格就会上涨,从而免除我们的费用,并使我们能够在后续交易中借入更多USDT 。在整个攻击过程中,MO 代币的价格也会上涨,使攻击者能够通过交换从该对中获得大量USDT 。

漏洞的根源在于对内代币的销毁和市场价格逻辑的利用。

学过的知识

借用函数中有两个严重的弱点值得我们注意

首先,将代币从对直接转移到外部目的地是一种极其危险的行为。UniswapV2 对内的代币余额有助于计算 K 状态,直接影响代币价格。因此,任何表现出类似行为的操作都应限制在管理员端或经过明确验证的功能中。

其次,依赖从货币对余额计算的价格会使系统容易受到价格操纵。即使货币对中不包含销毁代币,当前合约仍然容易受到闪电贷攻击。攻击者可以利用闪电贷中的大量资产在调用借入函数之前抬高 MO 代币价格,然后将 MO 缩水至原始价格。在借入过程中,抬高的价格使攻击者能够从合约中窃取大量USDT 。

来源
免责声明:以上内容仅为作者观点,不代表Followin的任何立场,不构成与Followin相关的任何投资建议。
喜欢
收藏
评论