Mitigazione dei problemi di serializzazione nell’AEM

Ultimo aggiornamento: 2023-12-07

Panoramica

Il team AEM dell’Adobe ha lavorato a stretto contatto con il progetto open-source NotSoSerial per contribuire a mitigare le vulnerabilità descritte in CVE-2015-7501. NotSoSerial è concesso in licenza in base al Licenza Apache 2 e include il codice ASM concesso in licenza con il proprio Licenza simile a BSD.

Il file jar dell’agente incluso in questo pacchetto è la distribuzione modificata di NotSoSerial di Adobe.

NotSoSerial è una soluzione Java™ a un problema di livello Java™ e non è specifica per l’AEM. Aggiunge un controllo preliminare a un tentativo di deserializzare un oggetto. Questo controllo verifica il nome di una classe rispetto a un inserisco nell'elenco Consentiti di classe di tipo firewall, a un inserisco nell'elenco Bloccati di o a entrambi. A causa del numero limitato di classi nel inserisco nell'elenco Bloccati di predefinito, è improbabile che questo test influisca sui sistemi o sul codice.

Per impostazione predefinita, l'agente esegue un controllo di inserisce nell'elenco Bloccati basato su un valore di per le classi vulnerabili correnti note. Questo inserisco nell'elenco Bloccati di ha lo scopo di proteggerti dall’elenco corrente di exploit che utilizzano questo tipo di vulnerabilità.

L’inserire nell'elenco Bloccati inserisco nell'elenco Consentiti di e di può essere configurato seguendo le istruzioni riportate nella sezione Configurazione dell’agente sezione di questo articolo.

L’agente ha lo scopo di contribuire a mitigare le classi vulnerabili più recenti. Se il progetto deserializza dati non attendibili, potrebbe essere vulnerabile ad attacchi Denial of Service, attacchi di memoria insufficiente e attacchi di deserializzazione futuri sconosciuti.

Adobe supporta ufficialmente Java™ 6, 7 e 8. Tuttavia, Adobe è consapevole del fatto che NotSoSerial supporta anche Java™ 5.

Installazione dell’agente

NOTA

Se in precedenza è stato installato l'hotfix di serializzazione per AEM 6.1, rimuovere i comandi di avvio agente dalla riga di esecuzione Java™.

  1. Installare com.adobe.cq.cq-serialization-tester pacchetto.

  2. Passa alla console web del bundle all’indirizzo https://server:port/system/console/bundles

  3. Cerca il bundle di serializzazione e avvialo. In questo modo l’agente NotSoSerial viene caricato in modo dinamico.

Installazione dell'agente sui server applicazioni

L'agente NotSoSerial non è incluso nella distribuzione standard dell'AEM per i server applicazioni. Tuttavia, puoi estrarlo dalla distribuzione del file jar dell’AEM e utilizzarlo con la configurazione del server applicazioni:

  1. Per prima cosa, scarica il file quickstart dell’AEM ed estrailo:

    java -jar aem-quickstart-6.2.0.jar -unpack
    
  2. Vai alla posizione dell’avvio rapido AEM appena decompresso e copia il crx-quickstart/opt/notsoserial/ cartella al crx-quickstart cartella dell'installazione del server applicazioni AEM.

  3. Cambia la proprietà di /opt all'utente che esegue il server:

    chown -R opt <user running the server>
    
  4. Configura e controlla che l’agente sia stato attivato correttamente come mostrato nelle sezioni seguenti di questo articolo.

Configurazione dell’agente

La configurazione predefinita è adeguata per la maggior parte delle installazioni. Questa configurazione include una inserisce nell'elenco Bloccati vulnerabile di classi di esecuzione remota note e un elenco Consentiti di pacchetti in cui la deserializzazione dei dati attendibili è sicura.

La configurazione del firewall è dinamica e può essere modificata in qualsiasi momento:

  1. Vai alla console web all’indirizzo https://server:port/system/console/configMgr

  2. Ricerca e clic Configurazione firewall deserializzazione.

    NOTA

    Puoi anche raggiungere direttamente la pagina di configurazione accedendo all’URL all’indirizzo:

    • https://server:port/system/console/configMgr/com.adobe.cq.deserfw.impl.DeserializationFirewallImpl

Questa configurazione contiene la registrazione del inserisco nell'elenco Consentiti di, del inserisco nell'elenco Bloccati di e della deserializzazione.

Consenti Inserzione

Nella sezione dell’elenco Consentiti queste voci sono classi o prefissi di pacchetti consentiti per la deserializzazione. Se stai deserializzando classi personalizzate, aggiungi le classi o i pacchetti a questo elenco Consentiti di.

Elenco Bloccati

Nella sezione dell’elenco di blocchi sono incluse classi che non sono mai consentite per la deserializzazione. Il set iniziale di queste classi è limitato alle classi che sono state trovate vulnerabili ad attacchi di esecuzione remota. Il inserisco nell'elenco Bloccati di viene applicato prima di qualsiasi voce inserita nell’elenco Consentiti.

Registrazione diagnostica

Nella sezione per la registrazione diagnostica, puoi scegliere diverse opzioni da registrare durante la deserializzazione. Queste opzioni vengono registrate solo al primo utilizzo e non agli utilizzi successivi.

Il valore predefinito di class-name-only indica le classi che vengono deserializzate.

È inoltre possibile impostare full stack opzione che registra uno stack Java™ del primo tentativo di deserializzazione per indicare dove avviene la deserializzazione. Questa opzione è utile per trovare e rimuovere la deserializzazione dall’utilizzo.

Verifica dell'attivazione dell'agente

Puoi verificare la configurazione dell’agente di deserializzazione consultando l’URL all’indirizzo:

  • https://server:port/system/console/healthcheck?tags=deserialization

Dopo aver effettuato l’accesso all’URL, viene visualizzato un elenco di controlli di integrità relativi all’agente. Puoi determinare se l’agente è attivato correttamente verificando che i controlli di integrità stiano passando. Se il problema persiste, è necessario caricare l'agente manualmente.

Per ulteriori informazioni sulla risoluzione dei problemi relativi all'agente, vedere Gestione Degli Errori Con Il Caricamento Di Dynamic Agent di seguito.

NOTA

Se aggiungi org.apache.commons.collections.functors al inserisco nell'elenco Consentiti di controllo dello stato di salute dell’, il controllo dello stato di salute ha sempre esito negativo.

Gestione degli errori con il caricamento degli agenti dinamici

Se nel registro sono esposti errori o se i passaggi di verifica rilevano un problema durante il caricamento dell’agente, carica l’agente manualmente. Questo flusso di lavoro è consigliato anche se utilizzi un ambiente JRE (Java™ Runtime Environment) invece di un JDK (Java™ Development Toolkit), perché gli strumenti per il caricamento dinamico non sono disponibili.

Per caricare l'agente manualmente, eseguire le operazioni seguenti:

  1. Modifica i parametri di avvio JVM del file jar CQ, aggiungendo la seguente opzione:

    -javaagent:<aem-installation-folder>/crx-quickstart/opt/notsoserial/notsoserial.jar
    
    NOTA

    Richiede che si utilizzi anche l'opzione -nofork CQ/AEM, insieme alle impostazioni di memoria JVM appropriate, in quanto l'agente non è abilitato su una JVM fork.

    NOTA

    La distribuzione Adobe del file jar dell’agente NotSoSerial si trova nel file crx-quickstart/opt/notsoserial/ cartella dell’installazione dell’AEM.

  2. Arrestare e riavviare la JVM;

  3. Verifica di nuovo l’attivazione dell’agente seguendo i passaggi descritti in precedenza in Verifica dell'attivazione dell'agente.

Altre considerazioni

Se esegui su una JVM IBM®, consulta la documentazione sul supporto per l’API Java™ Attach all’indirizzo questa posizione.

In questa pagina