服务器反序列化漏洞修复是分层防御的系统性工作,核心思路为堵住入口、限制执行、加固环境、持续监控;需先定位高危组件(如jboss的jmxinvokerservlet、shiro的rememberme、fastjson的json.parseobject),再通过禁用危险接口、升级版本、启用白名单、替换安全组件及构建检测闭环等措施实现根本加固。

确认漏洞来源并定位高危组件
先别急着改代码,得知道“谁在反序列化、从哪来的数据、用了什么库”。常见高危点包括:
-
JBoss:检查
/invoker/JMXInvokerServlet、/web-console/、/jmx-console/等路径是否开放,对应standalone.xml或server.xml中是否启用了危险Servlet -
Shiro:看Cookie里是否有
rememberMe=字段,结合版本判断(1.2.4及之前默认密钥kPH+bIxk5D2deZiIxcaaaA==极可能被利用) -
Fastjson:搜索代码中是否调用
JSON.parseObject()或JSON.parse()且传入了用户可控的JSON字符串,尤其关注是否开启Feature.SupportNonPublicField或AutoType -
Spring AMQP:检查是否使用
SimpleMessageConverter直接反序列化消息体,特别是消费端未做类型白名单限制
立即止血:禁用或隔离危险接口
对已知暴露面做最小干预,快速降低风险:
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
- JBoss下删除
$JBOSS_HOME/server/default/deploy/jmx-console.war和web-console.war;注释standalone.xml中<subsystem xmlns="urn:jboss:domain:webservices"></subsystem>下的<endpoint-expose></endpoint-expose>配置 - Shiro中在
shiro.ini或Java配置里显式禁用RememberMe:securityManager.rememberMeManager = $null,或重写RememberMeManager使其返回空实现 - Fastjson升级到
1.2.83+(已默认关闭autoType),或强制全局禁用:ParserConfig.getGlobalInstance().setAutoTypeSupport(false) - Spring AMQP中避免使用
SimpleMessageConverter,改用Jackson2JsonMessageConverter,并确保消息体只含JSON结构,不走Java原生序列化
根本加固:输入控制与反序列化约束
不能只靠删功能,要让反序列化本身变安全:
- 所有反序列化入口(如API参数、MQ消息、HTTP Body)必须做来源校验+格式校验+类型白名单。例如Fastjson启用
ParserConfig.getGlobalInstance().addAccept("com.yourpackage.") - Shiro升级到
1.8.0+,并自定义CookieRememberMeManager,替换硬编码密钥为随机生成、定期轮换的密钥,同时开启cookie.maxAge限制有效期 - JBoss应用部署前,移除
commons-collections、groovy等易被利用的Gadget库;或使用JEP 290(Java 9+)配置全局反序列化过滤器:-Djdk.serialFilter='maxdepth=5;maxarray=10000;java.lang.*;java.util.*;!' - 对JSON/YAML/XML等文本格式反序列化,优先选用Jackson(默认不支持
@type)、Gson(无autoType)替代Fastjson或XStream
长期防护:构建检测与响应闭环
修复不是终点,而是日常安全运营的一部分:
- 在CI/CD流程中加入SAST扫描(如SonarQube + FindSecBugs插件),自动识别
ObjectInputStream.readObject()、JSON.parseObject()等危险调用 - 生产环境开启JVM反序列化日志:
-Dsun.misc.URLClassPath.disableJarChecking=true -Dcom.sun.jndi.rmi.object.trustURLCodebase=false,配合ELK收集InvalidClassException、ClassNotFoundException异常 - 定期用
ysoserial或ShiroExploit对测试环境做红队验证,重点打RememberMe Cookie、管理后台、开放API三类入口 - 建立中间件版本台账,对JBoss 4.x/5.x、Shiro










