Fastjson漏洞

Fastjson漏洞

原理

本质是java的反序列化漏洞,由于引进了自动检测类型的(autotype)功能,fastjson在对json字符串反序列化的时候,会读取@type内容,会试图将json内容反序列化成这个对象,并调用这个类的setter方法,那么攻击者就可以构造特定的json内容和通过@type来指定自己想要的内部库,从而导致远程命令的执行漏洞

流量特征

采用post方法
发送数据包和返回包的数据类型为json类型
还有就是他的请求报文的花括号没闭合,请求包就会出现fastjson字段
响应包中有fastjson关键字
对于无回显的fastjson漏洞,其返回包中存在@type和dnslog平台网址
请求体可能含有攻击者c2服务器地址或者ladp协议,rmi协议的地址,还有就是,
返回包状态码一般为400,也可能为500
请求体中可能存在type,bytecodes,java.lang,返回包中含有commit = true

Fastjson不出网的利用与防护

利用

1.
利用 TemplatesImpl
TemplatesImpl​ 是最常见的利用类,因为它自带 bytecodes​ 字段,攻击者可以植入恶意字节码。
攻击无需额外依赖,只需要服务器环境支持 JDK。
2.
利用 BasicDataSource
针对 Tomcat​ 环境下的应用,攻击者可以利用 org.apache.tomcat.dbcp.dbcp.BasicDataSource​ 或 org.apache.tomcat.dbcp.dbcp2.BasicDataSource​ 类。
攻击者构造恶意 JSON,指向 BasicDataSource​ 类,通过某些触发条件实现远程代码执行。
触发条件
需要目标应用运行在Tomcat环境中
必须在 JSON 解析时启用 Feature.SupportNonPublicField​ 特性。
Tomcat 版本要求
Tomcat 8.0 之前:org.apache.tomcat.dbcp.dbcp.BasicDataSource
Tomcat 8.0 之后:org.apache.tomcat.dbcp.dbcp2.BasicDataSource

防护

使用Fastjson的黑名单功能:Fastjson提供了一个黑名单功能,可以用于禁止某些Java类的序列化和反序列化。通过设置一些敏感类的黑名单,禁止序列化和反序列化这些类,从而避免一些恶意攻击。
对Fastjson进行安全加固:对Fastjson进行安全加固可以避免恶意攻击。可以通过开启自动类型识别检查、限制反序列化对象的深度、限制反序列化对象的大小等措施,提高Fastjson的安全性。
使用其他JSON处理器:如果对Fastjson存在疑虑或者担心其安全性问题,也可以考虑使用其他JSON处理器,比如Jackson、Gson等。这些处理器同样具有高性能和易用性,并且也可以进行安全加固。

漏洞产生的原因

由于@type​字段的可控性,攻击者可以将@type​字段设置为特定且服务端可以使用的类,从而执行恶意代码。具体原理如下:
1.
@type字段的利用:在反序列化过程中,Fastjson会根据@type​字段的值来确定反序列化后的Java对象的类型。
2.
恶意类加载:攻击者可以指定一个特定的Java类,该类可以被利用来执行恶意代码。
3.
JNDI注入:利用一些常见的Java类(如com.sun.rowset.JdbcRowSetImpl​)来进行JNDI注入攻击,通过访问远程RMI或LDAP服务器来执行恶意代码。

漏洞修复

几种修复和防护措施包括:
1.
升级Fastjson版本:官方建议升级到最新版本,例如1.2.83版本。
2.
禁用危险类
3.
关闭AutoType功能:如果无法升级,可以暂时关闭AutoType功能降低风险。
4.
配置WAF防护:使用Web应用防火墙(WAF)防护。