小狐狸钱包正版官网|Gains Network 分叉中的错误让交易者每笔交易都能获利 900%:报告

根据区块链安全公司 Zellic 4 月 19 日的一份报告,Gains Network 杠杆交易协议的一个分支中的两个不同的错误可能会让交易者在每笔交易中获利 900%,无论交易的代币价格如何。其中一个错误存在于先前版本的 Gains 中,但后来得到了修补。另一个仅在协议的一个分支中发现。 


据Zellic称,其工作人员向 Gains分叉Gambit Trade、Holdstation Exchange和Krav Trade的开发人员通报了该漏洞,这些开发团队已确保他们的协议不包含这两个缺陷。然而,泽利克警告说,其他 Gains 分叉可能仍然容易受到攻击。


据其官网介绍,Gains Network是Polygon和Arbitrum上的去中心化金融(DeFi)产品生态系统。其杠杆交易应用程序的正式名称是“gTrade”。根据区块链分析平台 DefiLlama 的数据,自 2023 年 5 月成立以来,它已促成了超过 250 亿美元的衍生品交易量。


Gains Network 杠杆交易应用程序 gTrade 的用户界面。来源:增益网络

Zellic 声称,几个流行的 DeFi 交易应用程序都源自 Gains Network 的基础代码,包括前面提到的 Gambit Trade 和 Holdstation,以及许多其他协议。他们在研究某个特定分叉时发现了该漏洞,但拒绝透露是在哪个分叉中发现的。


根据该报告,Gains Network 合约允许用户打开市场、反转或动量交易订单。市价订单立即购买或出售资产,无论价格如何。


当用户请求开启动量或反转交易时,智能合约会记录一个“订单”,其中包含有关用户愿意以什么价格进行交易的数据。一旦达到此价格,任何用户都可以调用executeLimitOrder 函数来执行订单。调用执行的用户不必与下订单的用户相同。调用执行的用户会因执行此角色而获得少量“执行费”。 


这允许用户以类似于在中心化交易所中的方式下达限价(动量)和止损限价(反转)订单,但不需要中心化实体来执行订单执行。


用户下单时可以设置止盈价、止损价或两者兼而有之。这样设计的目的是让交易者能够在止盈点自动退出盈利的交易,或者在止损点自动退出亏损的交易。 


Gains 分叉中的错误允许买入订单获得 900% 的利润

在它研究的 Gains 分叉中,Zellic 发现,当开立订单时,止损价格存储在用于计算损益的“currentPrice”变量中。这意味着,如果用户能够将止损设置在开盘价之上,他们就可以自动从任何交易中获利。 


为了防止这种利用,该协议包含一项检查,如果用户试图将止损设置高于买入订单的开盘价,则会引发“wrong_sl”错误。


Gains Network 分叉检查,防止错误止盈或止损。资料来源:泽利克

然而,调查人员发现,在某些情况下,这项检查可能会被绕过。


当用户首次开仓时,他们设置想要开仓的价格,然后将其记录在变量“openPrice”中。正是在此时进行了检查。然而,用于执行订单的函数将此变量更改为“a.Price”的值,即当前价格加上所开订单的价格影响。 


这意味着,如果用户输入极高的开盘价,执行者可以通过简单地执行订单来绕过检查。这也允许执行者以低于最初设定价格的开盘价格执行订单。 


举个例子,Zellic 考虑了这样一种想法:攻击者下单以 100000e10(1 万亿美元)购买代币,并将止损设置为比该值少 1 美元,即 999.999999999999 万亿美元。下达订单后,攻击者就会执行自己的订单,导致 openPrice 从 100000e10 美元更改为考虑到交易价格影响后的当前价格。 


然后交易执行并开放。只要最终的开仓价格低于最初设定的止损,现在就可以通过执行止损来平仓。当攻击者执行自己的止损时,他们从收盘价与止损价格之间的差额中获利。


Zellic 声称,这次交易将为攻击者带来 900% 的利润。


获得分叉漏洞利用示例。资料来源:泽利克

当 Zellic 团队发现该缺陷时,Gains Network 中并不存在该缺陷。它只存在于它正在调查的分叉版本中。然而,在研究这个问题的过程中,它遇到了 Gains 早期版本中存在的第二个缺陷。


第二个错误允许卖单获得 900% 的利润

第二个错误使交易者无论价格走势如何都能通过卖单获利 900%。


当交易在收益叉中平仓时,它将用户的止损或止盈点转换为名为“int”的变量,然后用该变量以百分比形式计算利润。但如果用户输入的止损或止盈值正好是 2^256-1,则计算结果将导致“int”变为负数。

image.png


根据 Zellic 的说法,只要攻击者使用大于 9 倍的杠杆,他们就可以从此漏洞中获利 900%:


“让我们考虑一个卖单,当前价格的类型为(uint256).max。 diff 的结果值为 openPrice + 1 (int(type(uint256).max) = -1 ),因此利润百分比几乎等于 100 * 杠杆。因此,如果杠杆大于 9,该函数将返回 900% 的利润。”

合约中有一项检查试图阻止 2^256-1 作为止盈输入。但是,此检查仅在订单首次打开时执行。如果用户在开仓后更改了止盈点,他们可以绕过检查并输入2^256-1作为止盈,从而使他们每次交易时自动获得900%的利润。


第二个缺陷确实存在于先前版本的 Gains 中,但随后被修复。当前版本不包含此缺陷,因为它会在更新止盈和止损以及首次设置时执行检查。


据报道,Zellic 向上述所有分叉告知了这两个安全缺陷,并联系了加密安全联盟,试图找到可能受其影响的其他协议。然而,它警告说,一些Gains分叉可能仍然包含这些错误,使用户的资金面临被耗尽的风险。


Cointelegraph联系了Gains Network、Gambit Trade、Holdstation Exchange和Krav Trade征求意见,但截至发稿时尚未收到回复。


Gains Network 声称它提供了上市资产的“真实现货价格”,而不是它认为基于永续合约的不太准确的价格。它还声称与竞争对手相比提供卓越的外汇交易。