Fastjson漏洞
原理
本质是java的反序列化漏洞,由于引进了自动检测类型的(autotype)功能,fastjson在对json字符串反序列化的时候,会读取@type内容,会试图将json内容反序列化成这个对象,并调用这个类的setter方法,那么攻击者就可以构造特定的json内容和通过@type来指定自己想要的内部库,从而导致远程命令的执行漏洞
流量特征
还有就是他的请求报文的花括号没闭合,请求包就会出现fastjson字段
对于无回显的fastjson漏洞,其返回包中存在@type和dnslog平台网址
请求体可能含有攻击者c2服务器地址或者ladp协议,rmi协议的地址,还有就是,
请求体中可能存在type,bytecodes,java.lang,返回包中含有commit = true
Fastjson不出网的利用与防护
利用
1.
TemplatesImpl 是最常见的利用类,因为它自带 bytecodes 字段,攻击者可以植入恶意字节码。
2.
针对 Tomcat 环境下的应用,攻击者可以利用 org.apache.tomcat.dbcp.dbcp.BasicDataSource 或 org.apache.tomcat.dbcp.dbcp2.BasicDataSource 类。
攻击者构造恶意 JSON,指向 BasicDataSource 类,通过某些触发条件实现远程代码执行。
必须在 JSON 解析时启用 Feature.SupportNonPublicField 特性。
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版本。
3.
关闭AutoType功能:如果无法升级,可以暂时关闭AutoType功能降低风险。
4.
配置WAF防护:使用Web应用防火墙(WAF)防护。