【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析

渗透技巧 2年前 (2022) admin
1,430 0 0
关注公众号回复“漏洞”获取研究环境
漏洞信息


Veeam是全球数据保护领域的引领者。简单、灵活、可靠的云端、虚拟、物理备份和恢复解决方案的值得信赖的提供商。


近日Veeam官方发布Veeam Backup&Replication、Veeam Agent for Microsoft Windows等产品存在远程命令执行漏洞,编号分别为CVE-2022-26501、CVE-2022-26500和CVE-2022-26503:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


本文将深入分析其中的Veeam Backup&Replication CVE-2022-26500/26501组合RCE漏洞,以及Veeam Agent for Microsoft Windows CVE-2022-26503漏洞:


  • CVE-2022-26500/26501,Veeam 分发服务(默认为 TCP 9380)允许未经身份验证的用户访问内部 API 函数。远程攻击者可能会向内部 API 发送输入,这可能导致恶意代码的上传和执行(组合认证绕过、文件复制和ViewState反序列化实现RCE);

  • CVE-2022-26503,Veeam Agent for Microsoft Windows 使用 Microsoft .NET 数据序列化机制。影响版本:< 5 (build 5.0.3.4708)< 4 (build 4.0.2.2208)本地用户可能会向 Veeam Agent for Windows Service 开放的网络端口(默认为 TCP 9395)发送恶意代码,导致无法正确反序列化(.NET Remoting反序列化漏洞)。


环境搭建


注册Veeam官方账号,登录后点击`Request Trial Key`试用。


0x01 安装Enterprise Manager和backup


下载相关产品进行安装:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


安装可以参考:


安装教程

https://helpcenter.veeam.com/docs/backup/vsphere/install_vbr.html?ver=110


0x02 安装Veeam Agent for Microsoft Windows


下载漏洞版本(这里选择v5.0.2.4680)进行安装:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


CVE-2022-26500/26501组合RCE


根据CVE信息,漏洞出现在Veeam 分发服务(9380端口),经过调试发现利用链实际为一个不同端口的组合漏洞:首先是9380端口认证绕过导致服务器任意文件复制,然后是使用9443端口WebForm服务固定的`machinekey`实现远程命令执行。


0x01 认证绕过


`9380`端口由`Veeam.Backup.Agent.Config`启动:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


exe文件是`Veeam.Backup.Agent.ConfigurationService.exe`,定位`Main`主函数:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


启动`Service`服务,进入:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


绑定了`9380`和`9381`两个端口,`9380`端口号从注册表中读取:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`CInvokerServer`中包含用户认证代码:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`Athenticate`函数位于`CForeignInvokerNegotiateAuthenticator`:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


使用空用户名和密码可以绕过检查:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


0x02 文件上传


关键函数位于`CInvokerServer.ExecThreadProc`,主要执行过程如下:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


首先通过`ReadCompressedString`读取请求内容, 执行`CForeignInvokerParams.GetContext`将请求转化为`Context`,利用`CSpecDeserializationContext`进行转化:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


通过`GetOrCreateExecutor`获取到Executor:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


最终执行`Execute`函数,执行方式有`CInvokerServerRetryExecuter`、`CInvokerServerSyncExecuter`和`CInvokerServerAsyncExecuter`,他们都实现了`IInvokerServerExecuter`接口:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


在`CInvokerServerSyncExecuter`中执行同步操作:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`_spectExecutor`包含三个实现:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析

`Veeam.Backup.EpAgent.ConfigurationService.CEpAgentConfigurationServiceExecuter`代码中注意到有三个文件上传操作:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`EConfigurationServiceMethod.UploadManagerPerformUpload`分支中,处理函数支持上传Windows补丁、Windows安装包和Linux安装包:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


继续看`UploadWindowsPackage`函数,调用了`UploadFile`:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


在上传前提取了`Host`和`FileRelativePath`,如果把`host`设置为`127.0.0.1`则能够将文件上传到本地。


0x03 任意文件复制


在认证绕过代码基础上,首先参考`CSpecDeserializationContext`函数:


Veeam.Backup.Common.CInputXmlData FIData = new Veeam.Backup.Common.CInputXmlData("FIData");Veeam.Backup.Common.CInputXmlData FISpec = new Veeam.Backup.Common.CInputXmlData("FISpec");


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


编写测试代码,执行后服务器将调用`CInvokerServerSyncExecuter.Execute`函数:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


程序异常退出,原因是`GetSpec`获取内容出错:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


调试代码,紧接着执行`Unserial`,功能主要是根据`Scope`的值调用`XXX.Unserial`:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`GetScope`中读取`FIScope`,`DistributionService`的值为190:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


跟进`CInvokerDistributionBaseSpec.Unserial`,读取`FIMethod`作为执行方法:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`EConfigurationServiceMethod`中列出了支持的方法:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


接下来添加代码,执行到`CEpAgentConfigurationServiceExecuter`,同样在`GetSpec`函数中出错:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


继续动态调试分析,在`CConfigurationServiceBaseSpec.unserial`函数中执行`CConfigurationServiceUploadManagerPerformUpload.Unserial`,文件上传所需参数如下:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


最终构造出完整代码,成功写入文件:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


0x04 ViewState反序列化


通过前边几个步骤,目前能够复制文件,如何实现命令执行呢?查看IIS开放了`9080`和`6443`端口:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`9080/9443`端口WEB主目录`web.config`文件包含固定的`machineKey`,可以使用ViewState反序列化实现远程RCE:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


修改载荷拷贝`web.config`并远程访问,访问`9080`URL会自动跳转到9443端口:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


使用`ysoserial.exe`生成payload发送,成功弹出计算器:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


CVE-2022-26503 .NET Remoting反序列化漏洞


根据描述,Veeam Windows客户端使用.NET反序列化机制,用户可以通过9395端口发送反序列化数据实现命令执行。


0x01 .NET Remoting机制分析


9395端口由`Veeam.Endpoint.Service.exe`启动:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


找到`Main`入口函数:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


以服务形式启动,进入`RunAsService`函数:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


实例化`EndPointService`对象,然后通过`OnStart`启动:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


首先通过`Initialize`完成初始化:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


进入`CSrvTcpChannelRegistration`:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


binaryServerFormatterSinkProvider.TypeFilterLevel = TypeFilterLevel.Full;


存在.NET Remoting反序列化漏洞的风险。我们回到`OnStart`函数:


vbServer = this._disposableObjects.Add<CEndPointServiceImpl>(new CEndPointServiceImpl(this._environment.Options, this._terminator, externalEventHelper));


添加一个`CEndPointServiceImpl`服务,进入类`CEndPointServiceImpl`:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


进入`CEpRemotingAPIRegistration.RegisterRemotingTypes`:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


在`CEndpointServiceStub`中注册`VeeamService`服务,且使用`RemotingConfiguration.rigisterWellKnownServiceType`注册`.NET Remoting`服务:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


注意到`Veeam.Endpoint.Tray.exe`与`VeeamService`进行了通信:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


`Veeam.Endpoint.Tray.exe`加载`Veem.Common.Remoting.dll`:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


注册`TcpClientChannel`,且选项为`Secure=True`,比较通用的服务:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


0x02 .NET Remoting反序列化


回顾前面分析,.Net Remoting服务将`TypeFilterLevel`设置为`TypeFilterLevel.Full`,可以触发反序列化漏洞。服务名称为`VeeamService`,端口为9395。


使用ysosera.net生成反序列化载荷,结合空用户名和密码进行绕过,通过.NET Remoting发送工具最终可以实现RCE:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


修复方式


0x01 CVE-2022-26500/26501


在认证处理上,改为利用`CInvokerAdminNegotiateAuthenticator`类来处理:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


判断是否为管理员用户。同时在处理文件上传的地方,`CEpAgentConfigurationServiceExecuter`类增加了上传文件名检查:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析


0x02 CVE-2022-26503


`CSrvTcpChannelRegistration`类删除了`TypeFilterLevel.Full`设置:


【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析



由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。


点关注,不迷路!

【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析

关注公众号回复“漏洞”获取研究环境

原文始发于微信公众号(且听安全):【最新漏洞预警】CVE-2022-26500/26501/26503 全球顶级数据保护引领者Veeam多个产品RCE漏洞分析

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...