Apache MINA反序列化远程代码执行漏洞CVE-2024-52046
Apache Mina(Multipurpose Infrastructure for Network Applications)是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。
Apache Mina旨在帮助开发人员快速构建和管理网络应用程序,通过非阻塞I/O模型和多种协议支持,提高系统性能,并具有模块化设计。
一、基本情况
Apache Mina通过Java nio技术基于TCP/IP和UDP/IP协议提供抽象的、事件驱动的、异步的API,用于简化TCP/IP和UDP协议应用开发。
Apache Mina是一个高性能、轻量级的网络应用框架,通过抽象网络层来简化网络编程,使得开发者能够专注于业务逻辑而非底层细节。
Apache Mina支持TCP和UDP协议,其适用于服务器端的网络服务开发以及客户端的网络连接管理,通过事件驱动模型来处理网络事件。
栋科技漏洞库关注到Apache MINA中存在一个反序列化远程代码执行漏洞,漏洞被追踪为CVE-2024-52046,该漏洞CVSS 4.0评分10分。
一、漏洞分析
CVE-2024-52046漏洞是Apache MINA(Multipurpose Infrastructure for Network Applications)中存在的一个反序列化远程代码执行漏洞。
CVE-2024-52046漏洞源于Apache MINA中的ObjectSerializationDecoder组件使用 Java 的本机原生反序列化协议处理传入的序列化数据,
但缺乏必要安全检查和防御机制,使得攻击者可以向受影响的应用程序发送特制恶意序列化数据,利用不安全的反序列化过程触发漏洞。
攻击者利用不安全的反序列化过程触发漏洞,可能导致远程代码(REC)执行攻击,漏洞影响MINA core版本2.0.X、2.1.X和2.2.X等版本。
需要注意的是,该漏洞利用需要具备特定条件,只有在调用IoBuffer#getObject()方法的情况下使用MINA核心库的应用程序才会受到影响。
并且须在筛选器链中使用ObjectSerializationCodecFactory类添加ProtocolCodecFilter实例时,攻击者才可能会调用该特定方法利用漏洞。
若应用程序专门使用这些类,不仅需升级到MINA核心库最新版本,还要显式地允许解码器将在ObjectSerializationDecoder实例中接受类。
1、接受提供的ClassNameMatcher与*反序列化匹配的类名,除非它们被拒绝。
* * @param classNameMatcher要使用的匹配器*/public void Accept(class name matcher class name matcher)/
2、接受与为*反序列化提供的模式相匹配的类名,除非它们被拒绝。
* * @ param Pattern standard Java regexp */public void Accept(Pattern Pattern)/
3、接受通配符指定的类进行反序列化,除非它们被拒绝。
* { @ link org . Apache . commons . io . filename utils # wild card match(String,String)filename utils . wild card match }
*/public void accept(String...模式)默认情况下,解码器将拒绝将出现在输入数据中的*所有*类。
此外需要注意:FtpServer、SSHd和Vysper子项目不受该漏洞影响。
三、影响范围
Apache MINA 2.0.X < 2.0.27
Apache MINA 2.1.X < 2.1.10
Apache MINA 2.2.X < 2.2.4
四、修复建议
1、目前该漏洞已经修复,受影响用户可升级到以下版本:
Apache MINA 2.0.X >= 2.0.27
Apache MINA 2.1.X >= 2.1.10
Apache MINA 2.2.X >= 2.2.4
2、配置ObjectSerializationDecoder。
在升级后,还需要配置ObjectSerializationDecoder实例,以限制哪些类可以被反序列化。
默认情况下,ObjectSerializationDecoder 会拒绝所有传入的类,需要使用以下方法之一来明确允许特定的类:
accept(ClassNameMatcher classNameMatcher):使用提供的ClassNameMatcher来匹配允许反序列化的类名。
accept(Pattern pattern):使用标准Java正则表达式来匹配允许反序列化的类名。
accept(String... patterns):使用Apache Commons IO库中的通配符模式来匹配允许反序列化的类名。
3、检查使用 IoBuffer#getObject() 的地方。
该漏洞仅在应用程序使用 IoBuffer#getObject() 方法,
并通过 ProtocolCodecFilter 和 ObjectSerializationCodecFactory 进行数据处理时才会受到影响,应确保应用程序:
• 升级到修复版本。
• 配置并限制可以通过反序列化处理的类。
• 如果不需要 getObject() 方法,避免使用它,以减少安全风险。
4、测试和验证。
修复后,测试应用程序以确保它按预期工作并且没有引入新的问题,尤其是在序列化和反序列化处理方面,
然后验证ObjectSerializationDecoder的配置是否正确,确保只有预期的类被允许反序列化。
五、参考链接