一、背景

        前段时间公司使用Fortify工具对项目源码进行安全漏洞扫描,结果报出Dynamic Code Evaluation: Unsafe Deserialization漏洞。整个项目是基于Spring boot框架开发的。

二、问题源

   Fortify工具明确指出该安全漏洞是由于引入了Spring Boot Actuator依赖导致的

<dependency>
  <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
<dependency>

显然,由于项目已经投入使用,不能将该依赖直接删除,影响太大。所以经过上网搜索终于找到解决办法,现分享如下:

三、解决办法

      Fortify报出这个问题不是因为Spring Boot Actuator本身,而是因为它对Jackson的传递依赖。Jackson可能包含了会对不可信数据进行反序列化,因此如果这个警告是Jackson发出的,那么它就是一个误报。       

     问题的根源是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。

<!-- 排除掉 spring boot actuator 中的 jackson -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
  <exclusions>
     <exclusion>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
     </exclusion>
  </exclusions>
<dependency>

<!-- 单独添加jackson依赖,建议2.10.0以上 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.10.0</version>
</dependency>

 

更多推荐

Spring boot项目Fortify漏洞扫描问题解决