Динамическая оценка кода: небезопасная проблема форсированной десериализации - PullRequest
0 голосов
/ 07 ноября 2019

У меня возникает проблема с 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 

      }
   }
}

1 Ответ

0 голосов
/ 07 ноября 2019

ObjectMessage объекты зависят от сериализации Java, чтобы маршалировать и демаршировать полезную нагрузку своих объектов. Этот процесс обычно считается небезопасным, поскольку вредоносная полезная нагрузка может использовать хост-систему. Для этого было создано множество CVE . По этой причине большинство провайдеров JMS заставляют пользователей явным образом вносить в белый список пакеты, которыми можно обмениваться с помощью сообщений ObjectMessage. Например, вот соответствующая документация для ActiveMQ Artemis .

Не существует магического кода, исправляющего эту проблему, исключающего предупреждение от Fortify, кроме удаления использования ObjectMessage из вашегокод в целом (это то, что я на самом деле рекомендую).

Существует ряд других проблем с использованием JMS ObjectMessage, не связанных с безопасностью, которые вы должны прочитать о .

...