Fastjson 1.2.67前的UnSerializable RCE漏洞分析

2 下载量 48 浏览量 更新于2024-08-29 收藏 575KB PDF 举报
"Fastjson小于1.2.67 UnSerializable RCE分析研究" 这篇文章主要探讨了Fastjson库的一个严重安全漏洞,该漏洞存在于版本1.2.66及更早版本中。Fastjson是由阿里巴巴开发的JSON解析库,它能够处理JSON格式的数据,将Java Bean对象序列化为JSON字符串,反之亦然。然而,这个功能引入了一种风险,即通过反序列化不安全的数据可能导致远程代码执行(RCE)。 漏洞的关键在于Fastjson的`autotype`特性。当此功能启用时,攻击者可以利用`@type`指令指定反序列化的目标类型。Fastjson在反序列化过程中会尝试调用目标类的setter和getter方法。如果攻击者能够构造恶意的数据,使得程序执行进入特定类的易受攻击的setter或getter方法,就可能触发任意代码执行。这种恶意构造的数据片段通常被称为" gadget"。 在Fastjson 1.2.66中,这个漏洞是对之前1.2.24版本反序列化黑名单的一种绕过。这意味着尽管之前版本可能已经尝试阻止某些危险的反序列化操作,但在这个新版本中,攻击者找到了新的方法来规避这些防护措施。 为了复现这个漏洞,作者提到了两种方式:LDAP和RMI。其中,LDAP利用在JDK 11.0.1、8u191、7u201、6u211之前版本有效,而RMI的利用可能受到JDK版本的更多限制。作者给出了一个简单的`Exploit.java`示例,该示例展示了如何利用LDAP来触发漏洞。代码中,`Runtime.getRuntime()`被用于执行恶意命令,这通常是RCE漏洞的典型利用方式。 总结来说,Fastjson的这个反序列化漏洞是由于`autotype`功能设计上的缺陷,使得攻击者有机会通过精心构造的JSON数据,执行任意代码。为了防止此类攻击,用户应当及时更新到不受影响的Fastjson版本,或者禁用`autotype`功能,并且避免反序列化来自不可信来源的数据。对于开发团队,重要的是要在软件开发过程中充分考虑安全因素,进行代码审计和安全测试,以发现并修复类似的安全隐患。