如何检测CVE-2026-21509漏洞利用

admin 2026-02-09 01:05:11 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文介绍如何检测CVE-2026-21509漏洞利用,该漏洞通过MSOffice文档中的Shell.Explorer.1OLE对象触发旧版IE引擎加载恶意URL。作者开发oletools脚本和YARA规则检测包含特定CLSID的RTF文档,发现APT28已利用此漏洞实施攻击。漏洞核心在于微软遗漏了对Shell.Explorer.1的终止位设置,导致无需用户交互即可执行恶意代码。文章提供自动化检测方法和缓解措施。 综合评分: 85 文章分类: 漏洞分析,恶意软件,安全工具,威胁情报,应急响应


cover_image

如何检测 CVE-2026-21509 漏洞利用

Ots安全

2026年2月8日 10:39 广东

威胁简报

恶意软件

漏洞攻击

2026年1月26日,微软发布了针对MS Office新漏洞的公告和补丁,该漏洞已被恶意利用:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-21509

当时,除了指出该漏洞可利用 MS Office 文档进行利用,以及可通过{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}在注册表中设置名为 的特定键来缓解该漏洞外,没有提供任何技术细节。

初步猜测——漏洞利用可能是什么样子

接下来的几天里,我一直在研究这种新漏洞的利用方式,以便能够检测到它。

原来这EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B是一个特定的CLSID(类 ID),对应于Shell.Explorer.1COM 对象,可用于从任何应用程序打开旧版 Internet Explorer 引擎(又名Trident/MSHTML)。

早在2018年,Yorick Koster就在一篇文章:https://www.securify.nl/en/blog/click-me-if-you-can-office-social-engineering-with-embedded-objects/中提到过这种类型的对象,它可以用来从文档中下载并执行恶意文件(用户只需点击几下即可)。但自2018年以来,它一直未被正式认定为漏洞,因此,微软在2026年发布紧急修复程序,必然是出于某种新的考虑。

因此,为了利用 MS Office 文件中的 CVE-2026-21509 漏洞,我想到可以将 OLE 对象嵌入Shell.Explorer.1到 MS Office 文档中,或者插入一个带有特殊 URL 的外部关系,从而触发 Internet Explorer 引擎的使用,就像 CVE-2021-40444 使用“mhtml:”URL 的情况一样。

为了开始寻找潜在的漏洞,我使用 oletools 编写了一个脚本,该脚本尝试识别两种情况:具有特定 CLSID 的 OLE 对象,或具有不以“http”开头的特殊 URL 的外部关系。它适用于大多数类型的 MS Office 文件:OpenXML、OLE/CFB 和 RTF:https://gist.github.com/decalage2/26b6

重要提示:此脚本可用于查找和分析可疑文件,以尝试识别 CVE-2026-21509 样本,但这绝不是一种万无一失的检测方法,因为它可能会捕获与漏洞无关的其他文档。

另请注意,至少对于 OpenXML 文档(docx、xlsx、pptx)而言,仅使用 YARA 规则无法完全实现相同的功能,因为标准的 YARA 引擎无法在搜索字符串之前从 zip 压缩包中解压缩文件。您需要一个额外的工具来解压缩文件,然后再使用 YARA 规则。但是,可以编写 YARA 规则来检测旧版 OLE/CFB 文档(doc、xls、ppt)或包含Shell.Explorer.1OLE 对象的 RTF 文件。

注意:为了测试脚本,我使用了 Yorick Koster 于 2018 年提供的 PoC 来构建包含Shell.Explorer.1对象的 MS Office 文件:https://gist.github.com/securifybv/9e085c93b330441576c883193166fcbe – 该 PoC 会创建一个 DOCX 文件,该文件可以轻松转换为 DOC 和 RTF 格式。

野外的恶意样本

2026年2月1日,CERT-UA发布了一篇文章,报告了几个利用CVE-2026-21509漏洞的恶意文档,该漏洞归咎于APT28。这些样本也发布在MalwareBazaar上,标签为“CVE-2026-21509” – https://bazaar.abuse.ch/browse/tag/CVE-2026-21509/。

事实证明,我之前发布的 OLE 检查脚本可以检测到所有这些样本。该脚本显示,这些样本是包含“Shell.Explorer.1” OLE 对象的 RTF 文档,所以最初的猜测是正确的!原始脚本可在此处获取:https://gist.github.com/decalage2/26b6

使用 oletools 进行分析 – URL 提取

此外,我还改进了oletools的开发版本,使其能够使用rtfobj工具检测RTF文档中的“Shell.Explorer.1”OLE对象:

然后,可以使用该选项提取所有 OLE 对象并将其保存到文件中rtfobj -s all 。打开这些文件后,可以清晰地看到数据中的 URL。这些 URL 就是恶意有效载荷下载并执行的来源:

要安装或更新 oletools 到最新开发版本,请参阅此处的说明。

2月2日至4日期间,发表了多篇文章,其中包含更多样本、技术细节以及对整个攻击活动的分析:

  • Zscaler – APT28 在“Neusploit 行动”中利用 CVE-2026-21509 漏洞

    https://www.zscaler.com/blogs/security-research/apt28-leverages-cve-2026-21509-operation-neusploit

  • SynapticSystems – APT28:地理围栏作为目标信号(CVE-2026-21509 攻击活动),描述了漏洞本身以及对 RTF 样本的分析。

    APT28: Geofencing as a Targeting Signal (CVE-2026-21509 Campaign)

  • Trellix——APT28 利用 CVE-2026-21509 和云 C2 基础设施发起的隐蔽多阶段攻击活动

    https://www.trellix.com/blogs/research/apt28-stealthy-campaign-leveraging-cve-2026-21509-cloud-c2/

但这种漏洞是如何运作的呢?

事实上,利用此漏洞并不需要复杂的格式错误文档或 shellcode。如果您查看每个恶意样本,就会发现它们只是普通的 RTF 文档,其中包含Shell.Explorer.1配置了 URL 的 OLE 对象。当文档打开时,MS Word 会实例化该 OLE 对象,该对象会加载旧版 Internet Explorer 引擎来打开 URL。

这种老旧的浏览器引擎远不如最新的Windows功能严格和安全,这才是问题的核心。在已发现的恶意样本中,URL指向LNK文件,这些文件会在未经用户提示的情况下自动执行,之后任何恶意代码都可以运行。

换句话说,这种行为允许攻击者绕过本应阻止不安全文件下载的安全措施。

微软似乎几年前就通过阻止一些已知允许从 MS Office 文档执行不受信任代码的 OLE 对象来解决了这类问题。具体做法是在注册表中为每类不安全的 OLE 对象设置一个“终止位” 。

但不知何故,微软屏蔽了所有不安全的 OLE 对象,包括Shell.Explorer和Shell.Explorer.2,唯独Shell.Explorer.1忽略了 !

有些人,例如Yorick Koster,早在 2018 年就注意到了这个漏洞,但直到 2026 年 1 月,该漏洞才被实际用于网络攻击。此外,RTF 文档和 LNK 文件的使用可能使其更具攻击性,因为攻击者无需用户确认即可执行恶意代码。正是在那时,微软决定修复该漏洞,并将其命名为 CVE-2026-21509。

使用 YARA 实现自动化检测

现在我们对漏洞和恶意文档的外观有了更多了解,我们该如何实现自动检测呢?

由于所有已知的漏洞利用程序都使用 RTF 格式,我们可以构建一个 YARA 规则,因为Shell.Explorer.1CLSID{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B}在 RTF 中始终以相同的方式编码。OLE 对象以十六进制编码,CLSID 显示为字符串“C32AB2EAC130CF11A7EB0000C05BAE0B”。

我创建了一条 YARA 规则,用于检查是否存在该字符串、RTF 标头以及 OLE 对象所需的关键字。该规则可在以下仓库中找到:https ://github.com/decalage2/detect_CVE-2026-21509

合法文档没有充分的理由包含这样的 OLE 对象(用于将 Internet Explorer 引擎嵌入到其他应用程序中),因此误报应该很少。

YARA 规则有两种版本:

  • CVE-2026-21509_RTF.yar这样可以在 CLSID 字符串的每个字符之间添加空格。虽然速度较慢,但它的行为类似于 MS Word 中的 RTF 解析器,后者也允许这种空格。
  • CVE-2026-21509_RTF_nows.yar不包含空格。这条规则速度更快,但如果 CLSID 字符串中插入了空格或换行符,则可能会漏检一些检测结果。

另请注意,YARA 规则已上传至 MalwareBazaar,因此每次上传新的 CVE-2026-21509 样本时都会触发:https://bazaar.abuse.ch/browse/yara/SUSP_RTF_with_potential_CVE_2026_21509_exploit_nows/

以下是YARA规则的原始版本:

rule RTF_with_potential_CVE_2026_21509_exploit
{
    meta:
        description = "Detects RTF files containing a Shell.Explorer.1 OLE object, possibly an exploit for CVE-2026-21509"
        author = "Philippe Lagadec"
        reference = "https://decalage.info/CVE-2026-21509/"
        version = "1.2"
        date = "2026-02-03"
        license = "Detection Rule License 1.1 https://github.com/Neo23x0/signature-base/blob/master/LICENSE"
        // samples: https://bazaar.abuse.ch/browse/tag/CVE-2026-21509/

    strings:
        // RTF file signature
        $rtf_header = "{\\rt"
        // OLE object data
        $ole_object = "\\objdata"

        // This regex matches the Shell.Explorer CLSID hex-encoded with any amount of whitespace between characters
        $clsid = /C\s*3\s*2\s*A\s*B\s*2\s*E\s*A\s*C\s*1\s*3\s*0\s*C\s*F\s*1\s*1\s*A\s*7\s*E\s*B\s*0\s*0\s*0\s*0\s*C\s*0\s*5\s*B\s*A\s*E\s*0\s*B/ nocase

    condition:
        // File must start with RTF header
        $rtf_header at 0and
        // and contain an OLE object
        $ole_object and
        // And contain the CLSID string
        $clsid
}

END

公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址

排版 编辑 | Ots 小安

采集 翻译 | Ots Ai牛马

公众号 | AnQuan7 (Ots安全)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Ots安全 《如何检测 CVE-2026-21509 漏洞利用》

评论:0   参与:  0