跳到主要内容

MQ反序列化未经授权的类异常

Spring AMQP 反序列化未经授权的类异常解决方案

问题描述:

2023年10月 Spring官方披露 CVE-2023-34050 Spring AMQP反序列化漏洞漏洞。由于 SimpleMessageConverter 或 SerializerMessageConverter 默认未配置白名单,导致可以反序列化任意类。新版本中在未配置白名单的情况下则不允许反序列化任意类。 修复该漏洞后,使用SimpleMessageConverterSerializerMessageConverter时需要使用addAllowedListPatterns设置允许的序列化类。否则抛出异常:java.lang.SecurityException

解决方案

方法一:设置系统环境变量:SPRING_AMQP_DESERIALIZATION_TRUST_ALL(信任所有消息发送者)

IntelliJ IDEA:

  1. 编辑运行设置
  2. 点击更多选项,勾选环境变量,填写SPRING_AMQP_DESERIALIZATION_TRUST_ALL=true

方法二(推荐):使用Jackson2JsonMessageConverter消息转换类,而非simple

  1. 确保已经引入了以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
  1. 自定义消息转换器,注入到容器中:
@Configuration
public class RabbitMqConfig {
//....
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
//....
}