1. ホーム
  2. java

[解決済み] 動的なコード評価。安全でないデシリアライゼーション強化の問題

2022-02-18 05:21:31

質問事項

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 

      }
   }
}

解決方法は?

ObjectMessage オブジェクトのペイロードのマーシャルとアンマーシャルを行うには、Javaシリアライゼーションに依存します。悪意のあるペイロードがホストシステムを悪用する可能性があるため、このプロセスは一般に安全でないと考えられています。 CVEsが多い が作成されています。このため、ほとんどの JMS プロバイダは、ユーザに対して ObjectMessage メッセージになります。例えば、以下は関連する ActiveMQ Artemis のドキュメント .

この問題に対して、Fortify からの警告を除去するような魔法のようなコードの修正はありません。 ObjectMessage を完全に削除してください(これは私が実際に推奨する方法です)。

JMSの使用には、他にも多くの問題があります。 ObjectMessage セキュリティに関係なく について読む .