Fastjson绕过autoType反序列化漏洞研究
时间:2022-06-09 作者:安帝科技 VulEye-小菜逼
fastjson是开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到Java Bean。由于具有执行效率高的特点,应用范围广泛。
Part1 漏洞状态
Part2 漏洞描述
fastjson已使用黑白名单用于防御反序列化漏洞,经研究在特定条件下可绕过默认autoType关闭限制,攻击远程服务器,风险影响较大。
Part3 漏洞复现
– 复现环境:
Windows 10
Fastjson v1.2.78
Eclipse
– 新建win10 x64 虚拟机
– 安装jdk 1.9 x64
– 配置java环境,可以正确执行java -version
– 安装并启动eclipse x64
– 新建java工程
– 导入 fastjson 1.2.78 jar包
– Main函数执行fastjson反序列化
String json = “{\”@type\”:\”******\”}”;
JSON.parse(json);
– 提示 autoType 不支持,默认关闭autoType
– 新建测试绕过类
– 运行测试代码
String json = “{\”@type\”:\”******\”,\”@type\”:\”*******\”,\”value\”:\”calc\”}”;
JSON.parse(json);
– 成功弹出计算器
– 复现成功!
Part4 漏洞细节
正常情况下,代码不能执行的流程是抛出“autoType is not support”异常信息,从而防止被恶意利用来执行任意代码。
此漏洞借助构造特殊类,走到下图代码分支,达到绕过反序列化检测的目的。
绕过之后直接运行到加载类的代码分支,不抛出异常。
其中需要注意,所有代码流程中都有“safeMode”检测,所以开启“safeMode”可以缓解漏洞。
autoType里面有“safeMode”检查
autoType里面有 safeMode检查
Part5 修复缓解建议
1. 升级到最新版本1.2.83
2. safeMode加固
3. 升级到fastjson v2
4. 使用noneautotype版本
————————————————————
目前,安帝科技工业互联网安全虚拟化靶场平台已集成该漏洞分析研究的环境和组件,可测试、验证、演示该漏洞及其利用过程。
安帝科技工业网络靶场定位于一个能够映射真实的IT/OT运营环境的可配置和可扩展的成本效益比高的混合平台,可批量整合(虚拟、实体)OT环境特定的硬件资源(不同供应商的PLCs、HMIs、RTUs、历史数据库、SCADA等),同时模拟出IT/OT的各种工业流程场景和攻击场景,将虚拟化IT/OT网络与工业流程仿真模型相结合,提供安全可靠的科研、教育、培训、演练、对抗、比赛、演示等功能和服务。