风险通告
近日,微软发布12月份的漏洞补丁程序,其中包含一枚Microsoft Exchange 远程代码执行漏洞(CVE-2020-17144),Microsoft Exchange在处理内存中的对象时,存在一个远程代码执行漏洞。经过身份认证的攻击者可利用此漏洞以SYSTEM用户权限在目标系统上执行任意代码。和CVE-2018-8302、CVE-2020-0688类似,CVE-2020-17144同属需登录后利用的反序列化漏洞,但仅影响Exchange 2010服务器。
与CVE-2020-0688不同,由于漏洞本身有趣的成因和触发条件,在利用时无需明文密码,只要具备NTHash即可成功,在利用方式上会相对更加灵活。同时,存在漏洞的功能点本身具备持久化功能,利用成功后将直接进行持久化行为,在不修复漏洞的情况下将永远存在,其危害性和隐蔽性远大于CVE-2020-0688。鉴于此漏洞影响较大,建议客户尽快自查修复。
该漏洞由奇安信A-TEAM安全研究员发现并提交:
与CVE-2020-0688不同,由于漏洞本身有趣的成因和触发条件,在利用时无需明文密码,只要具备NTHash即可成功,在利用方式上会相对更加灵活。同时,存在漏洞的功能点本身具备持久化功能,利用成功后将直接进行持久化行为,在不修复漏洞的情况下将永远存在,其危害性和隐蔽性远大于CVE-2020-0688。
据奇安信全球鹰网络空间测绘系统统计,国内受此漏洞影响的目标主机主要分布在以下省份和地区:
Microsoft Exchange Server 2010
https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2020-17144
0x01 背景
Exchange提供了MRM功能对邮件生存周期进行管理,参考https://docs.microsoft.com/en-us/exchange/policy-and-compliance/mrm/retention-tags-and-retention-policies,其内部通过“标签”和“策略”进行实现。原文表述较为晦涩,简单总结就是:对一类邮件打上相同的标签(Tag),创建策略(例如定期删除)并应用到某个标签,使得被打上标签的邮件由邮箱助理模块定期统一进行处理。
微软在Exchange 2010中设计了一个机器学习功能,通过逻辑回归算法计算邮箱内全部邮件的标签状态,并为邮件自动标记。机器学习将生成模型,模型信息将保存至收件箱的用户配置中。
用户配置可以近似理解为一个以字符串为键的字典,其值可能为字典、XML或二进制流三种格式。在机器学习功能中,模型的保存格式为二进制流,其内容为.NET二进制序列化数据。
自动标记功能默认不会开启,但无论是否开启都不影响邮箱助理处理过程中进行的模型初始化加载,此过程在用户修改模型配置和邮箱助手启动时均会触发。
0x02 分析
此漏洞成因简单粗暴,首先,模型加载由[Microsoft.Exchange.InfoWorker.Common]Microsoft.Exchange.InfoWorker.Common.ELC.AutoTagging.MailboxManager::LoadModel方法进行实现,其代码极为简略:
internal bool LoadModel(out LearningModel, out MessageTransformer, bool parseFai)
{
messageTransformer = null;
learningModel = null;
using (UserConfiguration userConfiguration = ElcMailboxHelper.OpenFaiMessage(mailboxSession, "MRM.AutoTag.Model", createIfMissing: false))
{
if (userConfiguration == null)
{
return false;
}
if (parseFai)
{
return DeserializeModelFAI(userConfiguration, out learningModel, out messageTransformer);
}
}
return true;
}
OpenFaiMessage将从收件箱直接读取配置并返回。由于任意用户均可对自身配置进行任意修改,这里是一个可控输入:
internal static UserConfiguration OpenFaiMessage(MailboxSession mailboxSession, string faiMessageClass, bool createIfMissing)
{
.....
StoreId defaultFolderId = mailboxSession.GetDefaultFolderId(DefaultFolderType.Inbox);
try
{
userConfiguration = mailboxSession.UserConfigurationManager.GetFolderConfiguration(faiMessageClass, UserConfigurationTypes.Stream | UserConfigurationTypes.XML | UserConfigurationTypes.Dictionary, defaultFolderId);
}
.....
return userConfiguration;
}
随后DeserializeModelFAI方法将在没有任何SerializationBinder的情况下直接进行反序列化:
private bool DeserializeModelFAI(UserConfiguration configItem, out LearningModel learningModel, out MessageTransformer messageTransformer)
{
.....
try
{
using (Stream serializationStream = configItem.GetStream())
{
IFormatter formatter = new BinaryFormatter();
learningModel = (LearningModel)formatter.Deserialize(serializationStream);
messageTransformer = (MessageTransformer)formatter.Deserialize(serializationStream);
result = true;
}
}
.....
return result;
}
奇安信天眼产品解决方案
微软12月份补丁日修复了一批漏洞,奇安信天眼新一代威胁感知系统在第一时间加入了这些漏洞的检测规则,请将规则包升级到3.0.1208.12531及以上版本。规则名称:Microsoft Dynamics 365 for Finance and Operations远程代码执行漏洞(CVE-2020-17152),规则ID:0x10020B76;规则名称:Microsoft Exchange Server远程执行代码漏洞(CVE-2020-17144),规则ID:0x10020B75;规则名称:Microsoft SharePoint远程代码执行漏洞(CVE-2020-17121),规则ID:0x10020B74;规则名称:Microsoft Windows NTFS远程代码执行漏洞(CVE-2020-17096),规则ID:0x5d8d。奇安信天眼流量探针(传感器)升级方法:系统配置->设备升级->规则升级,选择“网络升级”或“本地升级”。
奇安信网神网络数据传感器系统产品检测方案
奇安信网神网络数据传感器(NDS3000/5000/9000系列)产品,已具备该补丁日多个高危漏洞(含:CVE-2020-17096、CVE-2020-17144和CVE-2020-17121)的检测能力。对应的规则ID为:51880、6070、6071,建议用户尽快升级检测规则库至2012091833以后版本并启用该多个检测规则。
2020年12月9日,奇安信 CERT发布安全风险通告
本文始发于微信公众号(奇安信 CERT):【安全风险通告】奇安信A-TEAM贡献一枚高危漏洞,Microsoft Exchange远程代码执行漏洞安全风险通告
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论