前言
该漏洞是三个月前由安全团队扫描出来的,主要影响是: FastJSON是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。由于具有执行效率高的特点,应用范围广泛。FastJSON 存在反序列化远程代码执行漏洞,漏洞成因是Fastjson autoType开关的限制可被绕过,然后反序列化有安全风险的类。攻击者利用该漏洞可实现在目标机器上的远程代码执行。本文主要从运维侧修复手段介绍了该漏洞的两种修复方式。
提示:以下是本篇文章正文内容,下面案例如果不放心,先自行在测试环境验证,验证通过后再上生产环境操作
一、漏洞详情
FastJSON是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。由于具有执行效率高的特点,应用范围广泛。 FastJSON 存在反序列化远程代码执行漏洞,漏洞成因是Fastjson autoType开关的限制可被绕过,然后反序列化有安全风险的类。攻击者利用该漏洞可实现在目标机器上的远程代码执行。 主要影响FastJSON<=1.2.80 版本
二、修复过程
修复过程涉及到服务重启,请自行确认重启时间
1.通过脚本方式修复
该版本涉及autotype行为变更,在某些场景会出现不兼容的情况
注意事项:
1、该脚本适合以 lib 库形式依赖 fastjson-*.jar 包的Java微服务包,如 Springboot 打包的 jar 包。
2、该脚本不支持直接打包 fastjson class 的 jar 包,即 jar 包中存在 "com/alibaba/fastjson/..." 类似结构,需要从代码升级修复。
3、该脚本不支持docker 镜像包据说有签名校验,直接改镜像文件可能会导致不可用。由于环境所限,这种情况没有验证过。
4、脚本适合 fastjson 全部版本。
1.1.脚本修复原理
1、扫描当前服务器所有jar包。
2、查看jar包依赖包中是否包括 fastjson-*.jar 包。
3、如果有,更新该依赖包为fastjson-1.2.83.jar。同时脚本在更新 jar 包之前,会备份该jar包到/export/fastjson_repair_workspace/backup_jars/ 目录下,防止替换后服务启动失败,后续方便回滚。
1.2.脚本演示
#!/bin/bash
# 2024-09-02
WORK_DIR="/root/fastjson_repair_workspace"
BACKUP_DIR="$WORK_DIR/backup_jars"
ALL_JARS="$WORK_DIR/all_jars.txt"
TARGET_JARS="$WORK_DIR/target_jars.txt"
DONE_FILE="$WORK_DIR/DONEFILE"
TARGET_VERSION="fastjson-1.2.81.jar" #修改为当前jar包中对应的fastjson包名,去lib目录下确认即可
FIX_VERSION="fastjson-1.2.83.jar" #要确认升级的包
#检查脚本执行环境是否具备超管权限
function check_env() {
mkdir -p $BACKUP_DIR
if [ $? -eq 1 ];then
echo "Permission denied, need root user"
exit
fi
}
#检查脚本执行用户,必须以服务器管理员root用户执行
function check_user() {
if [ "$(whoami)" != "root" ];then
echo "Need root user"
exit
fi
}
#检查是否有zip命令
function check_zip() {
which zip &> /dev/null
if [ $? -eq 1 ];then
echo "Install zip first"
exit
fi
}
#检查是否有unzip命令
function check_unzip() {
which unzip &> /dev/null
if [ $? -eq 1 ];then
echo "Install unzip first"
exit
fi
}
#检查当前服务器环境中是否存在要修复的fastjson包
check_fastjson_jar() {
if [ !