慢雾:OMNI Protocol 被黑简析
區塊鏈4年前 (2022-07-11)44
据慢雾安全团队情报,2022 年 7 月 10 号 OMNI Protocol 遭受闪电贷攻击。慢雾安全团队以简讯形式分享如下: 1. 攻击者首先通过 supplyERC721 函数抵押 doodle, 抵押后合约会给攻击者相应的凭证 NToken 2. 调用 borrow 函数借出 WETH 3. 调用 withdrawERC721 尝试提取 NFT...
据慢雾安全团队情报,2022 年 7 月 10 号 OMNI Protocol 遭受闪电贷攻击。慢雾安全团队以简讯形式分享如下:
1. 攻击者首先通过 supplyERC721 函数抵押 doodle, 抵押后合约会给攻击者相应的凭证 NToken
2. 调用 borrow 函数借出 WETH
3. 调用 withdrawERC721 尝试提取 NFT, 跟进到内部函数 executeWithdrawERC721 发现,提款会先通过 burn 函数去燃烧凭证
而 burn 函数中的 safeTransferFrom 函数会去外部调用接收地址的 OnERC721Received 函数,攻击者利用这点重入了合约的liquidationERC721 函数
4. 在 liquidationERC721 函数中,攻击者先支付了 WETH 并接收 doodle nft,接着通过判断后会调用 _burnCollateralNTokens 函数去燃烧掉对应的凭证,同样的利用了 burn 函数外部调用的性质攻击者再次进行了重入操作, 先是抵押了清算获得的 nft, 接着调用 borrow 函数去借出了 81 个 WETH,但由于 vars 变量是在 liquidationERC721 函数中定义的,因此第二次借款不会影响到 liquidationERC721 函数中对用户负债的检查, 这导致了攻击者可以通过 userConfig.setBorrowing 函数将用户的借款标识设置为 false 即将攻击者设置成未在市场中有借款行为。
5. 在提款时会首先调用 userConfig.isBorrowingAny() 函数去判断用户的借款标识,假如借款标识为 false, 则不会判断用户的负债,故此重入后的 81 WETH 的负债并不会在提款时被判断, 使得攻击者可以无需还款则提取出所有的 NFT 获利
此次攻击的主要原因在于 burn 函数会外部调用回调函数来造成重入问题,并且在清算函数中使用的是旧的 vars 的值进行判断,导致了即使重入后再借款,但用户的状态标识被设置为未借款导致无需还款。慢雾安全团队建议在关键函数采用重入锁来防止重入问题。
攻击交易:0x05d65e0adddc5d9ccfe6cd65be4a7899ebcb6e5ec7a39787971bcc3d6ba73996
相关文章
Robinhood宣布新增100多个预测市场合约,股价微跌1.16%
董宇輝,成立新公司,注冊地址和東方甄選關聯公司在同一棟樓
俄罗斯银行建议对NFT、智能合约进行监管
MetaMask“Portfolio Dapp”新增跨链桥服务
Alameda回应砸盘BIT质疑:不是1亿枚BIT抛售者,将会给出资金证明
Nansen CEO:Bybit风投部门昨日从FTX转移BIT,使FTX余额略低于1亿BIT
Binance调整FTT U本位永续合约维持保证金率,最高杠杆降为20倍
BitDAO:Alameda所持1亿枚BIT已转至链上
Huobi将在TRON网络重新铸造PGALA Token
FTX热钱包已清空现货ETH和稳定币
ETC Grants DAO正在逐步大额买入ETC
Huobi Global:已在走法律程序,pNetwork必将为自身行为承担法律责任
安全公司:上周pNetwork增发GALA事件根本原因系私钥明文在GitHub泄露
Huobi Global己开始执行PGALA交易手续费销毁计划
昨日IMX解锁逾2.5亿枚,Immutable X的一地址转移1.09亿枚IMX至7个地址
Dora Factory将于11月13日对vcDORA地址进行第一次快照
安全团队:PEAKDEFI项目遭受攻击事件简析
Lens Protocol:将采用Web3及加密通信协议XMTP提供Profile间私信服务
Lens Protocol 采用消息传递协议 XMTP 提供 Profile 间私信服务
元宇宙产业委员会:不得以虚拟货币作为数字藏品发行交易的计价和结算工具





