首页 > 解决方案 > 动态代码评估:不安全的反序列化强化问题

问题描述

我遇到了 Fortify 问题:

Dynamic Code Evaluation: Unsafe Deserialization

在下面一行:

rapidMtoorderObj = (MyMessageObject)theMessage.getObject(); 

我附上了我的 JMS 代码片段。任何人都可以检查我的 JMS 代码,并解释为什么我会遇到这个问题并分享修复。

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;

public class MyMessageBean extends MessageReceiver {
   private static final long serialVersionUID = 1L;

   public MyMessageBean() { 
       super();
   }

   public void onMessage(Message message) {
      MyMessageObject rapidMtoorderObj = new MyMessageObject(); 

      try {  
         ObjectMessage theMessage = (ObjectMessage)message;
         rapidMtoorderObj = (MyMessageObject)theMessage.getObject(); 
         // Getting "Dynamic Code Evaluation: Unsafe Deserialization" in this line 

      }
   }
}

标签: javajmsfortify

解决方案


ObjectMessage对象依赖于 Java 序列化来编组和解组其对象有效负载。这个过程通常被认为是不安全的,因为恶意负载可以利用主机系统。为此创建了许多 CVE 。出于这个原因,大多数 JMS 提供程序强制用户将可以使用ObjectMessage消息交换的包显式列入白名单。例如,这里是ActiveMQ Artemis 的相关文档

ObjectMessage除了完全从您的代码中删除使用(这是我实际推荐的)之外,没有针对此问题的神奇代码修复程序可以消除 Fortify 的警告。

使用 JMS 时还有许多其他ObjectMessage与安全性无关的问题,您应该了解这些问题


推荐阅读