一、背景
前段时间公司使用Fortify工具对项目源码进行安全漏洞扫描,结果报出Dynamic Code Evaluation: Unsafe Deserialization漏洞。整个项目是基于Spring boot框架开发的。
二、问题源
Fortify工具明确指出该安全漏洞是由于引入了Spring Boot Actuator依赖导致的
org.springframework.boot
spring-boot-starter-actuator
显然,由于项目已经投入使用,不能将该依赖直接删除,影响太大。所以经过上网搜索终于找到解决办法,现分享如下:
三、解决办法
Fortify报出这个问题不是因为Spring Boot Actuator本身,而是因为它对Jackson的传递依赖。Jackson可能包含了会对不可信数据进行反序列化,因此如果这个警告是Jackson发出的,那么它就是一个误报。
【Spring学习|Spring boot项目Fortify漏洞扫描问题解决】问题的根源是Spring Boot Actuator 对 "jackson-databind”的传递依赖导致的。这个漏洞在Jackson 2.9.7中被修复了,它阻止了某些类的多态反序列化。Spring Boot 2.0.6和2.1.0默认使用Jackson 2.9.7
解决方法:打开pom文件的依赖层次结构查看Jackson-databind版本。如果版本低于2.9.7,则在spring-boot-starter-actuator中exclude掉Jackson-databind,并单独添加更高版本(不低于2.9.7)的Jackson-databind。
org.springframework.boot
spring-boot-starter-actuator
com.fasterxml.jackson.core
jackson-databind
com.fasterxml.jackson.core
jackson-databind
2.10.0
推荐阅读
- spring|【网络安全】Spring框架漏洞总结(一)
- 安全|【组件攻击链】一文看懂Spring全家桶各类RCE漏洞
- spring|Spring Security OAuth2 远程代码执行漏洞分析(CVE-2016-4977/CVE-2018-1260)
- java|Spring框架JDN注入漏洞信息及排查方法
- 网关|突发!Spring Cloud 爆高危漏洞。。赶紧修复!!
- java|码神之路博客项目部署
- 笔记|纯手写SpringFramework-第二代(原创)
- Java|云原生DevOps(k8s/docker/springcloudalibaba)
- #|【多线程】线程池ThreadPoolExecutor(全面详解)