HAI:慢雾简析 OMNI 被黑原因:burn 函数会外部调用回调函数来造成重入问题

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

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

2.调用borrow函数借出WETH。

慢雾:Multichain(AnySwap)被黑由于anySwapOutUnderlyingWithPermit函数相关问题:据Multichain(AnySwap)早前消息,2022年01月18日,一个影响6个跨链Token的关键漏洞正在被利用。慢雾安全团队进行分析后表示,此次主要是由于anySwapOutUnderlyingWithPermit函数为检查用户传入的Token的合法性,且未考虑并非所有underlying代币都有实现permit函数,导致用户资产被未授权转出。慢雾安全团队建议:应对用户传入的参数是否符合预期进行检查,且在与其他合约进行对接时应考虑好兼容性问题。[2022/1/19 8:57:49]

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

知名区块链安全公司派盾、慢雾科技宣布参加HBTC Chain主网节点竞选:1月6日,据霍比特HBTC官方消息,知名区块链安全公司派盾、慢雾科技宣布参加HBTC Chain主网节点竞选,投票均已超过50万HBC,其中派盾节点名称PeckShield;慢雾科技节点名称SlowMist Zone。

截止至今日18:00,HBTC Chain主网节点投票竞选上线10天,成功竞选主网节点数量达16个,HBC总投票数量为6457124.38,HBC总投票质押率30.75%,质押价值已近2500万USDT。

HBTC Chain基于DPoS共识算法,精选优质节点作为HBTC Chain主网区块验证者。HBTC Chain将对竞选节点进行筛选及管理,意欲参选的项目方及个人可通过HBTC Chain节点竞选投票页面进行申请操作。更多详情请点击原文链接。[2021/1/6 16:34:50]

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

动态 | 慢雾区:已修复EOS智能合约底层asset类溢出缺陷:据慢雾区消息, EOS智能合约底层asset类存在溢出缺陷,目前 EOSIO v1.1.4版本已修复该问题。如果智能合约中使用到了 asset的乘法操作,建议更新对应的代码并重新编译合约。因为像 asset这样的工具代码是静态编译进合约中的,必须重新编译才能解决其中的安全隐患。[2018/8/9]

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

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

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

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

金星链

[0:0ms0-0:977ms