慢雾:OMNI Protocol 被黑简析_NFT:BSCBURN

据慢雾安全团队情报,2022年7月10号OMNIProtocol遭受闪电贷攻击。慢雾安全团队以简讯形式分享如下:

1.攻击者首先通过supplyERC721函数抵押doodle,抵押后合约会给攻击者相应的凭证NToken

2.调用borrow函数借出WETH

3.调用withdrawERC721尝试提取NFT,跟进到内部函数executeWithdrawERC721发现,提款会先通过burn函数去燃烧凭证

CryptoPunk #512以165 ETH价格成交:金色财经报道,据Cryptopunk.app数据显示,CryptoPunk #512已经以165 ETH的价格成交,约合312,313,.66美元,卖家为使用“0x0232d1”开头地址的蓝筹NFT投资者punksotc.eth,买家为curated.eth,交易完成后买家将该NFT转移到“0x9eedbf”开头的地址。[2023/7/18 11:00:58]

而burn函数中的safeTransferFrom函数会去外部调用接收地址的OnERC721Received函数,攻击者利用这点重入了合约的liquidationERC721函数

BitKeep Swap跨链新增支持Optimism:3月3日消息,多链钱包BitKeep宣布,BitKeep Swap已增加对二层网络Optimism的支持,提供Optimism上所有token在单链、多链间的直接兑换功能,无需使用ETH作为Gas费。目前,BitKeep Swap已支持16条链跨链交互,用户可以在Optimism与其它15条链之间进行自由询价、兑换,获取任意币对间最有效的交易路径和最优价格。[2023/3/3 12:40:40]

4.在liquidationERC721函数中,攻击者先支付了WETH并接收doodlenft,接着通过判断后会调用_burnCollateralNTokens函数去燃烧掉对应的凭证,同样的利用了burn函数外部调用的性质攻击者再次进行了重入操作,先是抵押了清算获得的nft,接着调用borrow函数去借出了81个WETH,但由于vars变量是在liquidationERC721函数中定义的,因此第二次借款不会影响到liquidationERC721函数中对用户负债的检查,这导致了攻击者可以通过userConfig.setBorrowing函数将用户的借款标识设置为false即将攻击者设置成未在市场中有借款行为。

CityDAO Parcel 0 “零号地块”空投申领窗口已向Citizen NFT持有者开放:5月18日消息,CityDAO宣布正式开始Parcel 0“零号地块”空投,土地NFT申领窗口已向Citizen NFT持有者开放,截止日期为北京时间7月1日2:00。CityDAO于2021年10月29日购买了怀俄明州40英亩地块,将地块治理权铸造为NFT并由公民NFT持有者分享,持有该NFT的用户可以拥有对地块财库的治理权,但不拥有该土地的所有权。[2022/5/18 3:23:36]

5.在提款时会首先调用userConfig.isBorrowingAny()函数去判断用户的借款标识,假如借款标识为false,则不会判断用户的负债,故此重入后的81WETH的负债并不会在提款时被判断,使得攻击者可以无需还款则提取出所有的NFT获利

此次攻击的主要原因在于burn函数会外部调用回调函数来造成重入问题,并且在清算函数中使用的是旧的vars的值进行判断,导致了即使重入后再借款,但用户的状态标识被设置为未借款导致无需还款。慢雾安全团队建议在关键函数采用重入锁来防止重入问题。

攻击交易:0x05d65e0adddc5d9ccfe6cd65be4a7899ebcb6e5ec7a39787971bcc3d6ba73996

来源:金色财经

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

水星链

[0:31ms0-1:7ms