Checkmarx错误:不可信数据的反序列化

在checkMarx扫描过程中,我正在对不信任的数据进行反序列化(在代码中找到与安全相关的漏洞),该方法正在接收JMS消息:

@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public void onmessage(Message message) {
    log.debug("Code Run Started - In Queue");
    if (message instanceof ObjectMessage) {
        ObjectMessage objMes = (ObjectMessage) message;
        try {
            ChangeOperationType changeOperation = null;
            changeOperation = (ChangeOperationType) objMes.getObject();
        } catch (JMSException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
            log.error("Message Type is incorrect (Not ChangeOperationType). ",e1);
        }
        try {
            callBackEndpoint = message.getStringProperty(CRMCommonProcessing.CALLBACK_ENDPOINT_URI_PROPERTY);
        } catch (JMSException e) {
            log.error("CALLBACK ENDPOINT VALUE ERROR. ",e);
        }
        change(changeOperation);
    } else {
        log.error("WRONG MESSAGE TYPE GIVEN");
    }
    log.debug("Code Run Complete - In Queue");
}

该问题的任何解决方法或解决方案吗?

ccyzzxt 回答:Checkmarx错误:不可信数据的反序列化

您在ObjectMessage方法中使用的

onMessage()对象依赖于Java序列化来编组和解组它们的对象有效负载。通常认为此过程是不安全的,因为恶意负载可能会利用主机系统。为此已创建Lots of CVEs。因此,大多数JMS提供程序都会强制用户将可使用ObjectMessage消息交换的程序包明确列入白名单。例如,这是相关的documentation for ActiveMQ Artemis

除了完全从代码中删除对ObjectMessage的使用(我实际上建议的)之外,没有解决此问题的魔术代码修补程序可以消除来自checkmarx的警告。如果可能,请定义有效负载(JSON,protobuf,XML)的数据表示形式,并使用javax.jms.TextMessagejavax.jms.BytesMessage进行承载。

使用JMS ObjectMessage还有许多其他与安全性无关的问题,您也应该read about

本文链接:https://www.f2er.com/3015464.html

大家都在问