原文作者:九九,慢雾安全团队
2022 年 6 月 27 日,据慢雾区消息,XCarnival 项目被曝出严重漏洞遭黑客攻击并盗走 3,087 个 ETH(约 380 万美元)。XCarnival 是一个 ETH 链上的 NFT 借贷项目,目前项目团队正在修复漏洞并承诺会对受影响的用户提供解决方案。慢雾安全团队第一时间介入分析,并将结果分享如下:
核心合约地址
P2Controller:
0x34ca24ddcdaf00105a3bf10ba5aae67953178b85
XNFT:
0x39360AC1239a0b98Cb8076d4135d0F72B7fd9909
xToken:
0x5417da20aC8157Dd5c07230Cfc2b226fDCFc5663
慢雾:Platypus再次遭遇攻击,套利者获取约5万美元收益:7月12日消息,SlowMist发推称,稳定币项目Platypus似乎再次收到攻击。由于在通过CoverageRatio进行代币交换时没有考虑两个池之间的价格差异,导致用户可以通过存入USDC然后提取更多USDT来套利,套利者通过这种方式套利了大约50,000美元USDC。[2023/7/12 10:50:27]
攻击者 EOA 地址
0xb7cbb4d43f1e08327a90b32a8417688c9d0b800a
攻击合约地址
0xf70F691D30ce23786cfb3a1522CFD76D159AcA8d
0x234e4B5FeC50646D1D4868331F29368fa9286238
慢雾:7月3日至7月7日期间?Web3生态因安全问题损失近1.3亿美元:7月10日消息,慢雾发推称,自7月3日至7月7日,Web3生态因安全问题遭遇攻击损失128,419,000美元,包括Encryption AI、AzukiDao、NFT Trader、MIKE&SID、Bryan Pellegrino、Aptos Foundation、Multichain、CivFund。其中,Multichain被攻击损失1.26亿美元。[2023/7/10 10:12:36]
0x7B5A2F7cd1cc4eEf1a75d473e1210509C55265d8
0xc45876C90530cF0EE936c93FDc8991534F8A6962
1.攻击者通过 XNFT 合约中的 pledgeAndBorrow 函数来进行抵押 NFT 并借出 xToken。
慢雾:利用者通过执行恶意提案控制了Tornado.Cash的治理:金色财经报道,SlowMist发布Tornado.Cash治理漏洞解析。 5月20日,Tornado.Cash遭受了治理攻击,利用者通过执行恶意提案控制了Tornado.Cash的治理。5月13日,利用者发起了20提案,并在提案中说明20提案是对16提案的补充,具有相同的执行逻辑。但实际上,提案合约多了一个自毁逻辑,其创建者是通过create2创建的,具有自毁功能,所以在与提案合约自毁后,利用者仍可以部署不同的以与以前相同的方式将字节码发送到相同的地址。不幸的是,社区没有看到拟议合约中的犯规行为,许多用户投票支持该提案。
在5月18日,利用者通过创建具有多个交易的新地址,反复将0代币锁定在治理中。利用提案合约可以销毁并重新部署新逻辑的特性,利用者在5月20日7:18(UTC)销毁了提案执行合约,并在同一地址部署了一个恶意合约,其逻辑是修改用户在治理中锁定的代币数量。
攻击者修改完提案合约后,于5月20日7:25(UTC)执行恶意提案合约。该提案的执行是通过 Delegatecall 执行的,因此,该提案的执行导致治理合约中由开发者控制的地址的代币锁定量被修改为 10,000。提案执行完成后,攻击者从治理库中解锁了TORN代币。金库中的TORN代币储备已经耗尽,同时利用者控制了治理。[2023/5/21 15:17:00]
动态 | 慢雾: 警惕利用EOS及EOS上Token的提币功能恶意挖矿:近期由于EIDOS空投导致EOS主网CPU资源十分紧张,有攻击者开始利用交易所/DApp提币功能恶意挖矿,请交易所/DApp在处理EOS及EOS上Token的提币时,注意检查用户提币地址是否是合约账号,建议暂时先禁止提币到合约账号,避免被攻击导致平台提币钱包的CPU资源被恶意消耗。同时,需要注意部分交易所的EOS充值钱包地址也是合约账号,需要设置白名单避免影响正常用户的提币操作。[2019/11/6]
在 pledgeInternal 函数中转入 NFT 并生成订单:
2. 接着调用 withdrawNFT 函数提取出质押的 NFT,其中首先判断该订单是否被清算状态,如果不是则判断该订单的状态是否为 NFT 还未被提取且借款金额为 0(无负债),如果通过即可提取抵押的 NFT。
3. 以上为攻击前生成订单的准备操作,接着攻击者开始利用生成的订单直接调用 xToken 合约中的 borrow 函数进行借款。
在 borrowInternal 函数中,会外部调用 controller 合约中的 borrowAllowed 函数来判断是否可以借款。
可以看到在 borrowAllowed 函数会调用 orderAllowed 函数进行订单相关信息的判断,但是在这两个函数中均没有进行 _order.isWithdraw 状态的判断。因此攻击者可以利用之前生成的订单(订单里的抵押的 NFT 已经被提走)来调用 XToken 的 borrow 函数来借款,而因为抵押的 NFT 在之前已经被提出,故攻击者可以不用还款来实现获利。
此处仅展示其中一笔攻击交易的细节,其余攻击交易的手法均一致,不再赘述。
攻击前准备——生成订单的交易:
0x61a6a8936afab47a3f2750e1ea40ac63430a01dd4f53a933e1c25e737dd32b2f
1. 首先攻击者将 NFT 转入攻击合约并进行授权,接着调用 xNFT 合约中的 pledgeAndBorrow 函数在进行抵押 NFT 生成订单并借款的操作,此处需要注意一点是该函数可以控制传入的 xToken,攻击者传入了自己构造的 xToken 合约地址,并且让借款数量为 0,目的是为了满足后续能成功提出 NFT 时的不被清算且负债为 0 的条件。
2. 攻击者紧接着调用 withdrawNFT 函数来进行提取抵押的 NFT:
正式攻击交易:
0x51cbfd46f21afb44da4fa971f220bd28a14530e1d5da5009cfbdfee012e57e35
攻击者调用 xToken 合约的 borrow 函数,传入之前生成的订单的 orderID,重复了该操作 22 次(orderID: 45 - 66),而因为 NFT 在准备阶段已经提走,估计无需还款以此来获利。
本次漏洞的核心在于借款的时候,没有进行订单中 NFT 是否被提走的状态的判断,导致攻击者可以在把 NFT 提走之后再利用之前生成的订单来借款而无需还款,以此来获利。针对此类漏洞,慢雾安全团队建议在进行借款操作时应做好订单状态中是否已经提走抵押品的判断,避免再次出现此类问题。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。