JOIN:CertiK:Osmosis漏洞被利用 500万美元损失事件分析

北京时间2022年6月7日,CertiK审计团队监测到Osmosis漏洞被利用,导致了约500万美元的资产受到损失。

此次事件起因于函数MaximalExactRatioJoin中存在的代码漏洞。

该函数由CalJoinPoolShares调用,根据输入的代币数量计算份额。函数MaximalExactRatioJoin的漏洞导致一旦用户通过JoinPool提供流动性,CalJoinPoolShares就会向用户提供远大于其原本应给的LP份额。

推特公告链接:?

https://twitter.com/osmosiszone/status/1534470729797976064

攻击步骤

Immutable X协议上线NFT报价功能:12月2日消息,以太坊二层扩容方案Immutable X宣布正式上线NFT报价(Offers)功能,允许NFT买家对资产提出报价,卖家同意买家提出的价格。Offers的推出将调节当前NFT市场,为Immutable X支持的NFT市场增加更多的流动性。目前,Offers处于测试阶段,存在部分限制,测试期结束后将全面推出。[2022/12/2 21:17:44]

该次攻击中有多人恶意进行多笔交易,以下分析以攻击者①中两个被利用的交易为例。

①攻击者调用JoinPool()将29.95USDC和26.03OSMO的流动性添加至GAMM池,铸成的LP份额为8.79GAMM-678。

②之后,攻击者从678池中调用ExitPool(),使用之前的份额移除流动性。

Binance澄清10亿美元恢复基金来自自有资产:金色财经报道,在转移钱包的细节引起质疑后,加密货币交易所Binance澄清,其行业恢复基金的10亿BUSD初始存款来自Binance的自有资产。

链上交易显示,这些资金来自币安为BUSD准备的一个冷钱包。这个钱包最近被列入Binance的资金证明文件中,该文件显示了该交易所拥有的所有冷钱包和热钱包,这是其在FTX倒闭后推动透明度的一部分。(the block)[2022/11/25 20:46:05]

③由于对剩余代币的份额计算错误,攻击者能够提取约为存款金额1.5倍的代币。

④攻击者多次重复以上攻击步骤,以获取更大的利润。

漏洞分析

此次事件漏洞的根本原因在于对剩余代币的份额计算错误。

FTX用户正通过购买FTX巴哈马用户ID和贿赂FTX员工提币:金色财经报道,专门研究SBF故事的推特用户Autism Capital发文表示,很多人正在购买FTX巴哈马用户ID和贿赂FTX员工以从FTX巴哈马提走自己的资金。金色财经发现,用户AlgodTrading花费10万美元进行KYC认证后成功提币210万枚USDT;Austerity Sucks发推表示愿意出100万美元和不设限法律费用让FTX员工把KYC认证改成巴哈马;加密KOL Cobie也发现一个0x26地址从FTX提现2100万USDT。[2022/11/11 12:50:54]

一旦用户在x/gamm/keeper/msg_server.go中通过Msg.JoinPool信息调用函数JoinPool。

CoinShares资产管理规模在第三季度回升至20亿英镑以上:金色财经报道,数字资产管理公司CoinShares发布了第三季度财报,在第二季度,该公司资产管理规模低于20亿英镑;到9月30日已恢复到20.2亿英镑。调整后的利息、税项、折旧和摊销前利润或EBITDA(衡量公司财务业绩的常用指标)为640万英镑(略高于730万美元)。然而,这低于一年前调整后的EBITDA 2610万英镑。[2022/11/1 12:02:56]

该函数即会调用x/gamm/keeper/pool_service.go第95行的函数JoinPoolNoSwap()。

在函数JoinPoolNoSwap()中,通过调用函数getMaximalNoSwapLPAmount()在第192行计算出shareOutAmount的所需流动资金后,函数JoinPoolNoSwap()将在osmosis/x/gamm/pool-models/balancer/amm.go第286行调用pool.JoinPool()。

彭博社:纳斯达克正等待监管明确后推出加密交易平台:金色财经报道,彭博社报道,纳斯达克(NASDAQ)执行副总裁Tal Cohen表示,纳斯达克可能会等到加密货币交易平台的监管更加明确、被多数机构采用之后,再推出自己的加密货币交易平台。

Tal Cohen补充道,为零售客户提供服务的市场已经相当饱和,纳斯达克将专注于其加密托管服务,因为如果你能妥善保管人们的资产,他们就会信任你,为之后开展各种业务做好铺垫。[2022/10/6 18:40:44]

然后函数pool.JoinPool()将在第252行调用函数pool.CalcJoinPoolShares(),并且在执行pool.CalcJoinPoolShares()时在第283行调用cfmm_common.MaximalExactRatioJoin()。

函数cfmm_common.MaximalExactRatioJoin()将在添加流动性时计算usedAmount,它将份额比例与用户投入的代币数量相乘。

然而,所需的流动资金应该等于minShareRatio*池中的总流动资金。通常情况下,总流动性大于一个用户存入的代币,也就是usedAmount小于预期。这里需要注意的是返回值remCoins记录了流动性增加后的剩余代币。usedAmount比预期的要小,因此导致remCoins的值比预期的要大。

在执行函数cfmm_common.MaximalExactRatioJoin()后,这些剩余的代币remCoins将通过调用函数pool.calSingleAssetJoin()在第300-310行被用来向资金池添加更多的流动性。然而,由于remCoins的数量比预期的要大,所以提供给用户的份额将比预期的多。

资产去向

Osmosis已官放宣布发现该漏洞,并正在进行修复。被盗资金与CEX账户有关,并已通知执法部门。Osmosis还宣布,利用Osmosis漏洞的四个人已经被确认,其中两人将归还资金;另外两人Osmosis正在进行联系,等待进一步沟通。

Osmosis表明,所有损失都将得到弥补。这些资金将来自其战略储备,而不是社区的资金池。另外被盗的资金将大概率被追回。

漏洞交易

该次攻击中有多人恶意进行多笔交易,我们以其中一人的一次交易作为示例:

攻击者①:https://www.mintscan.io/osmosis/account/osmo1hq8tlgq0kqz9e56532zghdhz7g8gtjymdltqer

相关的漏洞交易?

JoinPool

https://www.mintscan.io/osmosis/txs/573EFD7828573B06FF6C13DFEDC3B2FFC281D4F78854D9B9F676528490C3396B

ExitPool

https://www.mintscan.io/osmosis/txs/E789B8FF7A42F27A0AC352C5C1281EA27996B6F22C5B24478A9B85C5919DE637

攻击者②:

https://www.mintscan.io/osmosis/account/osmo1tg70tuzekpd376dpqr68yx5a7r709w6x8jtxha

相关的漏洞交易?

JoinPool

https://www.mintscan.io/osmosis/txs/380A10103F53296A1CE663FDA5CF79DA904E0EC175C866C5FDFB106A934C64BD

ExitPool

https://www.mintscan.io/osmosis/txs/D70852934B81194DA6C776F2DA90AF095A19F7018894350E19A369FF5A1EC810

写在最后

如果文件x/gamm/pool-models/internal/cfmm_common/lp.go在审计范围内,可通过审计发现这一风险因素。

CertiK在此提醒大家,除了审计之外,新增的代码也需要在上线前及时进行相应测试。

来源:金色财经

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金星链

PEPEAVA:Kava 10:一场公链生态建设示范

曾经有人表示,如果以太坊基金会早期不出售其持有的ETH,那么其资金体量将会数百倍于现在。不过,转念一想,如果以太坊基金会没有通过不断出售ETH,将资金用于进行生态建设,那么我们可能也难以经历ET.

[0:15ms0-1:80ms