原创漏洞 | 西门子博途19任意代码执行漏洞分析

原创漏洞 | 西门子博途19任意代码执行漏洞分析

  原创漏洞  

摘要  

       这篇文章旨在介绍2个西门子博途19最新版可以导致任意代码执行的反序列化漏洞,该漏洞会在任意博途工程打开过程中触发,导致启动预先安装的隐蔽性永久后门。漏洞是由于博途软件在加载工程文件的时候,没有对软件的配置文件进行过滤,导致恶意代码被执行。该漏洞是由浙江国利网安科技有限公司工控安全实验室在2024年4月18日对博途软件加载工程进行分析的过程中,通过对配置文件内容的解析流程进行分析时首次发现的,后续的漏洞修复工作请及时关注我司及西门子官方公告。


西门子博途19介

       TIA博途是全集成自动化软件TIA Portal的简称,是西门子工业自动化集团发布的一款全新的全集成自动化软件。它是业内首个采用统一的工程组态和软件项目环境的自动化软件,几乎适用于所有自动化任务。借助该全新的工程技术软件平台,用户能够快速、直观地开发和调试自动化系统。


       TIA博途的核心优势在于其统一化的工程组态环境,它集成了西门子的多个自动化软件组件,如SIMATIC Step 7(用于控制器和分布式设备的组态和编程)和SIMATIC WinCC(用于人机界面的组态)等。这些组件在TIA博途平台上可以共享数据和管理,从而简化了自动化项目的开发过程。


       此外,TIA博途还提供了丰富的功能,如仿真工具、能源管理功能、多用户管理以及支持云解决方案等,这些功能有助于进一步提高工厂的生产力,优化质量管理,缩短产品上市时间,并提供了更大的灵活性。


       TIA博途的设计基于面向对象和集中数据管理,实现了数据的一致性和无缝集成。它还引入了项目范围的交叉索引系统,使用户能够在整个自动化项目内轻松查找数据和程序块,从而极大地缩短了软件项目的故障诊断和调试时间。


1.TypeConverter派生类反序列化的漏洞


1.1 漏洞原理介绍


      我们在分析博途工程文件的打开流程中发现,博途会去解析工程的全局配置文件,并根据配置文件中的内容进行一些初始化配置工作,这其中就涉及到了对类实例的创建,即反射。由此,我们发现了该过程中的一个漏洞点,即通过使系统加载用户精心构造的配置文件来达到任意代码执行的效果。


      通过分析可以发现,整个漏洞触发的流程可以用概况的用下面的图表示。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 1 博途加载工程时漏洞触发流程


      其中,TypeConverterCVE类是继承自TypeConverter类的子类,需要将该类的类型写入到配置文件中。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 2 修改的配置文件


      在TypeConverterCVE子类继承Type- Converter父类的时候,通过覆盖父类的CanConvertFrom方法来达到任意代码执行的效果。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 3 子类继承父类的关系


      同时,需要使用微软提供的gacutil.exe将子类TypeConverterCVE注册到程序集中,.net框架sdk为我们提供的一个工具gacutil.exe用于将一个签名后的.net程序集注册到全局gac缓存中,它能够被所有.net程序集共享,可以在任意位置加载。除此之外,还需要将子类TypeConverterCVE的实现代码(实现为某个dll)注册到系统目录中。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 4 子类覆盖父类中的CanConvertFrom方法


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 5 注册到系统的dll


      基于以上搭建的环境,在用户打开博途19的工程文件时,系统将会解析配置文件,并把其中的子类TypeConverterCVE通过反射的方式在内存中进行重建,最终会执行覆盖的父类TypeConverter的方法CanConvertFrom,达到任意代码执行的效果。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 6 反序列化效果


1.2 漏洞相关备注


      博途工程全局配置文件的格式为基于zip加密流的形式储存的xml配置文件。加解密方式可以调用Siemens.Automation.Archiving.dll实现的ArchivingService接口操作,目录结构模式为普通zip压缩包目录模式,目录中的文件流采用ZlibDeflateStream加密流二次加密压缩,通过这个加密流类转换后可以得到解密后的数据内容,或者将需要加密的数据内容重新加密后写入压缩包文件,下面是对应的解密方法。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 7 解密配置文件的方法


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 8 解密得到的配置文件


1.3 漏洞利用效果


      在实际环境中,利用该漏洞需要具备管理员权限,利用该权限去修改系统的配置文件,从而达到任意代码执行的效果,攻击者可以借此执行对系统进行破坏的恶意代码。


2.MultiLanguageString任意参数反序列化的漏洞


2.1 漏洞原理介绍


      博途在加载工程并解析配置文件的时候,会加载语言相关的资源文件,该文件同样可以作为一个反序列化的输入点来实现任意代码的执行。具体的触发流程如下,首先利用自定义的hex.zh-CHS.resources资源文件生成对应的语言资源dll,这一步主要是将资源文件的内容嵌入到语言资源dll文件中,该资源文件的内容为用户自定义的强名称类。当博途加载该语言资源dll时,会解析嵌入其中的资源文件hex.zh-CHS.resources,并通过其中的强名称来加载对应的恶意dll,该恶意dll为用户自定义的恶意代码,系统加载完成该恶意dll后,会根据强名称创建恶意dll中的恶意类实例,并执行其中的方法,最终导致任意代码执行,整个流程如下图所示。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 9 加载资源文件时的反序列化流程图


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 10 配置文件中的恶意类名称


      在解析资源文件时,在读取2个固定的校验值整数后,继续读取的就是伪造的任意.net 运行时强名称类型AssemblyQualifiedName。接下来会调用Activator.CreateInstance创建这个类型的实例,在实例的构造函数中实现任意代码执行。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 11 反序列化调用链


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 12 反序列化效果


2.2 漏洞相关备注


      资源文件的创建可以通过在vs中新建.resx类型资源文件并添加任意资源,使用资源文件生成器(resgen.exe)将包含资源的文本或XML(.resx)文件编译为二进制 .resources 文件。然后,使用程序集链接器(al.exe)将.resources 文件编译为Satellite程序集。al.exe从指定的 .resources 文件创建Satellite程序集只能包含资源,它们不能包含任何可执行代码。该漏洞在资源文件中写入的是类型的强名称。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

图 13 资源文件内容


2.3 漏洞利用效果


      通过修改博途软件的配置文件,在配置文件中添加对应的恶意类声明,可以实现在用户加载博途工程的时候执行攻击者准备的恶意代码,达到安装后门或者木马到系统的目的,给系统安全带来隐患。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

公司简介

 Company Profile 


       浙江国利网安科技有限公司坚守“让控制更安全,让用户更放心”的使命,凭借30年的工控技术积累和十余年的工控安全研究,已形成了“工控安全试验场”“工控安全盾”等独具特色与优势的攻防核心技术、安全产品与服务体系,以及完整的行业解决方案,在水务水利、石油炼化、油气管网、城市燃气、电力能源、轨道交通、智能制造等行业拥有众多客户,致力于成为世界一流的关键基础设施安全整体解决方案提供商。


原创漏洞 | 西门子博途19任意代码执行漏洞分析

原文始发于微信公众号(国利网安):原创漏洞 | 西门子博途19任意代码执行漏洞分析

版权声明:admin 发表于 2024年5月23日 下午5:09。
转载请注明:原创漏洞 | 西门子博途19任意代码执行漏洞分析 | CTF导航

相关文章