热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Cobo区块链安全月报——盘点解析1月典型安全事件

CoboLabs是亚太最大的加密货币托管平台,最受机构欢迎的金融资管服务商Cobo的加密货币研究实验室。


Cobo Labs 是亚太最大的加密货币托管平台,最受机构欢迎的金融资管服务商 Cobo 的加密货币研究实验室。


我们专注于创新项目,前沿加密数字技术领域,全球市场合规动向,市场基本面及波动因子;旨在帮助市场参与者和加密货币爱好者,降低进入市场的认知门槛。

此篇文章由 Cobo 区块链安全研究团队供稿,团队成员来自知名安全实验室,有多年网络安全与漏洞挖掘经验,曾协助谷歌 、微软处理高危漏洞,并获得谷歌、微软等厂商致谢,曾在微软 MSRC 最有价值安全研究员Top 榜单中取得卓越的成绩。团队目前重点关注智能合约安全、DeFi 安全等方面 ,研究并分享前沿区块链安全技术。

我们也希望对加密数字货币领域有研究精神和科学方法论的终身迭代学习者可以加入我们的行列,向行业输出思考洞察与研究观点!

此篇是 Cobo Labs 的第  4  篇文章。





                                      

跨链桥 Multichain 漏洞


1月18日 知名跨链桥 Multichain(前身 Anyswap)发现并修复了一个针对 WETH, PERI, OMT, WBNB, MATIC, AVAX 共 6 种代币有重要影响的漏洞。凡对 Multichain Router 授权过上述代币的用户均受影响,攻击者可直接利用漏洞转走用户授权的代币。根据 19 日的官方公告,由于部分用户未及时取消授权,有约 445 WETH 被攻击者盗走。


漏洞发生在 AnyswapV4Router 合约上的 anySwapOutUnderlyingWithPermit 函数中,由于函数对 Token 参数的合法性没有校验,攻击者可传入伪造的 Token 合约来代替原本官方的 AnyswapV1ERC20 Token。另一方面 WETH 等代币合约没有实现 permit 方法但是实现了 fallback 函数,因此在后续调用 permit 时不会发生 revert,可以继续成功执行下去。最终导致攻击者可以将受害者 approve 给 AnyswapV4Router 合约的 Token 盗走。


关键代码如下:

function anySwapOutUnderlyingWithPermit( address from, address token, address to, uint amount, uint deadline, uint8 v, bytes32 r, bytes32 s, uint toChainID ) external { address _underlying = AnyswapV1ERC20(token).underlying(); IERC20(_underlying).permit(from, address(this), amount, deadline, v, r, s); TransferHelper.safeTransferFrom(_underlying, from, token, amount); AnyswapV1ERC20(token).depositVault(amount, from); _anySwapOut(from, token, to, amount, toChainID); }


Cobo Comment

对于普通用户来说,需要特别留意 Token 无限授权(ERC20 Infinite Approval )所带来的风险。授权尽可能保证只授权用到的 Token 数量,而不要使用默认的无限授权,避免节约了 gas 却丢失了本金。对已有的无限授权要及时撤销,查询账户的授权情况可以使用 Etherscan 的工具 https://etherscan.io/tokenapprovalchecker 。


Reference

https://github.com/W2Ning/Anyswap_Vul_Poc

https://theblockbeats.info/news/28774

https://hackernoon.com/erc20-infinite-approval-a-battle-between-convenience-and-security-lk60350r




BSC 上的 DEX Crosswise 遭攻击


1月18日 BSC 上的 DEX 项目 Crosswise 遭受攻击,损失约 30 万美金,并造成 CRSS Token 币价闪崩。


问题是因 MasterChef 合约 的 setTrustedForwarder 函数没有正确进行权限校验。当攻击者修改了 TrustedForwarder 后,可以实现伪造 msg.sender 的效果,从而直接获取到 MasterChef 的 owner 权限。然后再利用 owner 权限调用 set 函数设置 strategy 为攻击者的恶意参数 0xccddce9f0e241a5ea0e76465c59e9f0c41727003 。修改 strategy 后通过少量 deposit 即可 withdraw 大量的 CRSS Token 获利。


相关代码如下:

function setTrustedForwarder(address _trustedForwarder) external { require(_trustedForwarder != address(0)); trustedForwarder = _trustedForwarder; emit SetTrustedForwarder(_trustedForwarder);}
function _msgSender() internal override virtual view returns (address payable ret) { if (msg.data.length >= 24 && isTrustedForwarder(msg.sender)) { // At this point we know that the sender is a trusted forwarder, // so we trust that the last bytes of msg.data are the verified sender address. // extract sender address from the end of msg.data assembly { ret := shr(96,calldataload(sub(calldatasize(),20))) } } else { return msg.sender; }}


官方公告也承认这个漏洞过于明显,似乎是开发者有意为之,其内部调查后开除了 4 个开发者。目前已经对链上数据进行了快照,后续将进行重新部署。官方 git 上已经开始进行整体的代码审计,据称后续会再联合 Certik 进行审计。


Cobo Comment

此次攻击针对的是 MasterChef 合约,其实不会直接盗取用户的 LP 或者 CRSS token,但币价大跌还是会让持有 CRSS 的用户造成实际的损失。查看官方 doc 上无法找到项目审计报告,此漏洞比较明显,如果经过安全公司审计的话,很大概率可以暴露出来。对于个人投资者来说,未经过审计的项目还需谨慎。


Reference

https://twitter.com/peckshield/status/1483340900398895105

https://crosswise.medium.com/post-exploit-update-2a24c3370466

https://bscscan.com/address/0x70873211cb64c1d4ec027ea63a399a7d07c4085b#code

https://github.com/crosswise-finance/crosswise-code-review-1.1



Rari #90 即 Float Protocol Pool 遭受预言机操纵攻击


1月15日,RariCapital 上的 90 号池即 Float Protocol 池遭受预言机操纵攻击。


该池使用 Uniswap V3 FLOAT/USDC 交易对报价,而在攻击发生之前几天,FLOAT/USDC 池中流动性下降(只剩下约 ~$550k),低流动性给了攻击者进行进行预言机操纵攻击的机会。攻击者使用 47 ETH(价值约 $120k)在池中使用 USDC 兑换 FLOAT,导致 FLOAT 报价升高。之后再使用 FLOAT 抵押到 Rari #90 池中借出其他资产实现获利。攻击手法与 2021 年 11 月发生的 Rari #23 池 Vesper Lend Beta 攻击一致。


Cobo Comment

对于一些无法使用 ChainLink 预言机报价的小币种,DeFi 合约中通常会使用 DEX 作报价。目前 UniswapV2/V3 延时报价虽然可以抵抗闪电贷攻击,但无法抵抗真实的大资产操纵;而 TWAP 时间加权机制虽然可以在一定程度上提高操纵难度,但只能缓解不能根除。从开发者角度,可以考虑在合约中添加一定风控类代码针对恶意报价进行检查。对普通用户而言,则要留意相关的流动性池,提防价格操纵风险。


Reference

https://twitter.com/FloatProtocol/status/1482184042850263042

https://medium.com/vesperfinance/on-the-vesper-lend-beta-rari-fuse-pool-23-exploit-9043ccd40ac9



DefiDollar 发现潜在攻击


1月8日 DefiDollar Finance (@defidollar) 发推表示在 DUSD 合约中发现一个潜在漏洞,合约已经暂停,所有资金安全。据称该漏洞可能是使用了区块链监测系统自动发现的。其思路是监测链上 Tornado.Cash 转账到新地址并部署合约的行为(这是许多真实攻击中的典型初期准备行为)。进一步通过对合约和相关交易的分析来发现潜在的攻击行为,发现问题时将立刻通知相关项目方进行预防。有人已经在 Forta 上实现了类似的 Agent.


Cobo Comment

项目方可以考虑类似的方式,通过监测链上的新合约和内存池中的交易,对于可疑的合约或交易可以进行静态分析或模拟执行,检查是否会对自身项目关联合约中的资产有不良影响。随着区块链攻防的升级,可以预见类似的监测告警系统将会越发成熟,当然攻击者也会挖掘到更多 bypass 监测的攻击方式。在传统安全中攻防持续对抗的局面在区块链安全中也将不断重现。


Reference

https://twitter.com/AndreCronjeTech/status/1479778350084333574

https://connect.forta.network/agent/0x2fbec7dcd4eebf34c5b94d899109057eea3642a2400b7143e64873d453b7ba61



Rari pool #19 攻击失败


知名区块链安全白帽 @samczsun 发布了针对 Rari #19(Index Coop Pool)的预警推文,但后面攻击没有实际发生。


攻击手法与前面提到的 Float Protocol Rari #90 预言机攻击是类似的。攻击者在 Uniswap V3 将约 300 个 ETH 兑换成了 BED,实现对币价的操纵。由于 Uniswap V2/V3 Oracle 都是在第二个区块才会更新币价,使攻击者无法在一个交易内完成对币价的操纵,从而可以对抗闪电贷攻击。而当使用真实的大资金进行操纵时,攻击者则需要至少等待到第二个区块才能看到币价的反应。由于 TWAP 的存在,通常攻击者还需要多等待几分钟,以使币价变得更加明显。对于此次攻击来说,攻击者也确实是这样做的。然而尴尬的是,在第二个区块出现了疑似套利机器人的存在,此地址在第二个区块立刻将将手中的大量 BED 兑换成了 ETH,维持住了原本币价的稳定。使得攻击者无法继续攻击,并且还要承担 swap 的 gas、手续费与大单交易滑点的损失。


Cobo Comment

Uniswap V2/V3 Oracle 虽然可以抗闪电贷攻击,但是无法直接对抗大资金操纵。因此对于流动性较小的交易对,仍然存在预言机价格被操纵的风险。从攻击者的角度看,要进行对 Uniswap V2/V3 Oracle 操纵攻击,需要较高的攻击成本,而且需要保证自己持有市场中大部分所操纵的池子的目标代币,否则就会出现上面的情况,被其他持有目标代币的大户套利,最终偷鸡不成蚀把米。


Reference

https://twitter.com/samczsun/status/1486243806739587076




OpenSea 前端漏洞


@PeckShield 发文称 OpenSea 可能有前端问题,有用户利用该问题获利 347 ETH。这个漏洞可能与 @yakirrotem 披露的问题有关。


OpenSea 的交易架构是:

  • 卖家发起 listing(相当于报价),这时用户会对报价数据进行签名,表示同意以设置的价格出售其 NFT。

  • 这个签名数据会保存在 OpenSea 的链下数据库中,当买家在 OpenSea 上购买该 NFT 时,OpenSea 会把这个签名数据上链验证,通过后即可完成 NFT transfer,OpenSea 也会收取一部分手续费。

  • 售出前,卖家也可以取消之前的 listing,被 cancel 的 listing 会在链上验签时失败,从而不会被出售。

 

这里存在的问题是,OpenSea 允许在原有 listing 不取消的情况下,再次发起 listing(目前该问题已经修复)。这时虽然 OpenSea UI 上已经看不到卖家旧的报价,但其实旧的 listing 依然存在并有效。攻击者可以在 https://orders.rarible.com 中查询到旧的 listing。由于 OpenSea 的 listing 并没有 交易 Nonce 机制,旧的 listing 依然是有效的。攻击者可以通过旧的 listing 直接购买 NFT,并以新的价格售出。由于 NFT 有剧烈的价格波动,通过这种方式可以实现巨额套利。


https://etherscan.io/token/0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d?a=9991#inventory 就是一例子:1 月 24日 BAYC 的 NFT 在 OpenSea 上先以 0.77 ETH 买入,又以 84.2 ETH 卖出。


Cobo Comment

普通用户建议登录 https://orders.rarible.com 查询自己是否有旧的 listing,并立刻进行取消处理。更稳妥安全的方式是直接将 NFT 转移到新地址上。


Reference

https://twitter.com/PeckShieldAlert/status/1485547426467364864

https://twitter.com/yakirrotem/status/1485559864948629512



Metamask 泄露个人 IP 漏洞


@alxlpsc 在 medium 上披露称 Metamask 存在严重的隐私泄露问题。漏洞主要是利用了 MetaMask 自动加载 NFT 图片 URL。基本的攻击思路:攻击者在可以将 NFT 的 URI 设置成自己可控的服务器网址,并将 NFT transfer 给目标账户;当用户登录 Metamask 时,Metamask 会自动扫描账户上所拥有的 NFT,并发起指向攻击者服务器的 HTTP 请求;攻击者则可以从访问日志中得到受害者的 IP 信息。


Cobo Comment

区块链的匿名性主要来自链上地址与链下身份的剥离。如果能够通过链上的地址确认链下身份,在区块链场景下确实是比较严重的危害。在传统安全中泄露主机 IP 通常不被认为是特别严重的问题(毕竟一条钓鱼短信或者邮件就可能做到),但在主张匿名性的区块链世界,隐私的重要程度会再上一个台阶。相信类似的,因安全场景不同而导致漏洞级别不同的情况,在区块链这个相对较新的领域还会不断出现。


Reference

https://medium.com/@alxlpsc/critical-privacy-vulnerability-getting-exposed-by-metamask-693c63c2ce94



wxBTRFLY 漏洞披露与修复

@immunefi 的白帽黑客发现了 wxBTRFLY Token 合约中存在严重漏洞。合约中的 transferFrom 函数没有正确更新 recipient 的授权,并且会错误更新 msg.sender 的授权。


相关代码如下:

function transferFrom(address sender, address recipient, uint256 amount) public virtual override onlyAuthorisedOperators returns (bool) { _transfer(sender, recipient, amount); _approve(sender, msg.sender, allowance(sender, recipient ).sub(amount, "ERC20: transfer amount exceeds allowance")); // 应该使用 allowance(sender, **msg.sender**) return true;}


漏洞本身虽然严重但成因并不复杂(更像是开发者笔误产出的),比较有意思的是官方的修复方式。由于合约本身不支持升级,因此无法直接更新合约代码;合约不支持暂停,因此也没法用快照 + 迁移的方式转移用户资产。最终官方的措施是自己发动了攻击交易,将所有受漏洞影响用户的资产转移到了一个多签钱包中。待后面部署新 Token 合约后会再行分配。


Cobo Comment

ERC20 Token 已经有比较成熟的代码模板,wxBTRFLY 是在重写 transferFrom 时出现的问题。这个问题如果有完善的单元测试应该会很容易发现,项目方可能在开发过程中是缺少完善的测试流程。


Reference

https://discord.com/invite/rpkPDR7pVV

https://twitter.com/redactedcartel/status/1482497468713611266?s=20

https://etherscan.io/tx/0xf0e4ccb4f88716fa5182da280abdb9ea10ec1c61cfc5bbe87e10bdde07c229d6




Qubit 跨链桥被攻击


1 月 28 日,BSC 上的 DeFi 平台 Qubit Finance 的跨链桥 QBridge 遭受攻击,损失约 8000 万美金。


跨链桥一种常见的实现形式是在源链的合约中抵押资产,并 emit event。由监听节点捕捉 event,向目标链的跨链桥合约发起调用,mint 等量的资产。来源链上只要有 event 事件产生,跨链桥系统就会认为有跨链资产需要转移。但如果源链上跨链桥合约代码存在问题,就可能出现没有资产抵押进跨链桥合约但仍 emit event 的情况,产生漏洞,造成目标链 Token 的错误增发。


QBridge 就存在这样的问题。QBridge 支持抵押 ETH 和 ERC20 Token 两类资产。由于以太坊的 ETH 作为 native 代币,与 ERC20 Token 由两套单独的代码处理。在源链抵押 Token 时,会调用 deposit 方法,在抵押时 ETH 应该调用 depositETH 方法。QBridge 将零地址作为 ETH 的标识。但是实现时没有完善的校验,导致合约处理 ETH 时仍使用 deposit 方法,相当于将 ETH 当成了合约地址为零地址的 Token 处理。在转账时使用 transferFrom 则相当于是对零地址进行合约调用。而以太坊底层设计上,对 EOA 地址发起合约调用会默认成功,不会 revert。以上条件结合起来,最终的情况就是虽然攻击者在源链没有抵押任何资产,但仍可以在目标链上 mint 出大量 qXETH,实现获利。


Cobo Comment

目前区块链行业中多链并存,跨链桥已经是重要的基础设施。跨链桥本身由于要进行链上链下配合,整体复杂度要比普通 dapp 高上许多,因此更容易出现问题。同时跨链桥上通常会抵押大量的资产,如果可以非法转移那么获利颇丰。各个跨链桥系统似乎成为了攻击者们最近一两月中的重点目标。


Reference

https://mp.weixin.qq.com/s/PLbuI9JFxyFRlDlj9rPvmQ

https://mp.weixin.qq.com/s/-kTsAs2WH5_4N4_3-XIxag






Cobo Labs 希望协助加密世界投资者规避风险、提高收益,为传统金融机构、风险投资公司、通证基金、个人投资者、交易所、媒体等伙伴提供客观、有深度的数据分析。

关于亚太最大的加密货币托管及资管平台 Cobo:我们向机构提供领先的安全托管与企业资管业务;我们向全球高净值合格投资人提供加密数字钱包业务和丰富灵活的定期与结构化产品,我们关注金融创新,并 2020 年第三季度成立了第一家面向全球机构的基金产品「DeFi Pro」。



推荐阅读
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在C#编程中,数值结果的格式化展示是提高代码可读性和用户体验的重要手段。本文探讨了多种格式化方法和技巧,如使用格式说明符、自定义格式字符串等,以实现对数值结果的精确控制。通过实例演示,展示了如何灵活运用这些技术来满足不同的展示需求。 ... [详细]
  • 如何使用 `org.eclipse.rdf4j.query.impl.MapBindingSet.getValue()` 方法及其代码示例详解 ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • 一篇关于五个编程问题的 Reddit 帖子引发了广泛讨论,特别是关于这些题目是否适合所有软件工程师。 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • 2018年在北航听陈博士讲解时,对重入漏洞有了初步了解。最近重温了慢雾科技的相关文章,发现他们对重入漏洞的解释非常清晰明了。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 在Cisco IOS XR系统中,存在提供服务的服务器和使用这些服务的客户端。本文深入探讨了进程与线程状态转换机制,分析了其在系统性能优化中的关键作用,并提出了改进措施,以提高系统的响应速度和资源利用率。通过详细研究状态转换的各个环节,本文为开发人员和系统管理员提供了实用的指导,旨在提升整体系统效率和稳定性。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
author-avatar
被爱的超萌baby
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有