Riduzione dei problemi di serializzazione in AEM

Panoramica

Il team AEM del Adobe ha lavorato a stretto contatto con il progetto open source NotSoSerial per aiutare a mitigare le vulnerabilità descritte in CVE-2015-7501. NotSoSerial è concesso in licenza con la licenza Apache 2 e include il codice ASM concesso in licenza con la propria licenza BSD.

L'agente Jar incluso con questo pacchetto è Adobe distribuzione modificata di NotSoSerial.

NotSoSerial è una soluzione a livello Java per un problema a livello Java e non è AEM specifico. Aggiunge un controllo di verifica preliminare a un tentativo di deserializzazione di un oggetto. Questo controllo verifica il nome di una classe rispetto a un elenco consentiti e/o in stile firewall. A causa del numero limitato di classi nel elenco Bloccati di predefinito, è improbabile che questo abbia un impatto sui sistemi o sul codice.

Per impostazione predefinita, l'agente eseguirà un controllo di elenco Bloccati rispetto alle classi vulnerabili attualmente note. Questo elenco Bloccati è inteso a proteggere l'utente dall'elenco corrente di sfruttatori che utilizzano questo tipo di vulnerabilità.

Il elenco Bloccati e il elenco consentiti possono essere configurati seguendo le istruzioni fornite nella sezione Configuring the Agent di questo articolo.

L'agente ha lo scopo di attenuare le ultime classi vulnerabili conosciute. Se il progetto sta deserializzando dati non attendibili, potrebbe comunque essere vulnerabile agli attacchi di negazione del servizio, agli attacchi di memoria esauriti e agli attacchi di deserializzazione futuri sconosciuti.

Adobe supporta ufficialmente Java 6, 7 e 8, tuttavia la nostra comprensione è che NotSoSerial supporta anche Java 5.

Installazione dell'agente

NOTA

Se avete già installato in precedenza l'hotfix di serializzazione per AEM 6.1, rimuovete i comandi di avvio dell'agente dalla riga di esecuzione Java.

  1. Installate il pacchetto com.adobe.cq.cq-serialization-tester.

  2. Andate alla console Web del pacchetto all'indirizzo https://server:port/system/console/bundles

  3. Cercate il bundle di serializzazione e avviatelo. Questo dovrebbe caricare dinamicamente l'agente NotSoSerial.

Installazione dell'agente sui server applicazioni

L'agente NotSoSerial non è incluso nella distribuzione standard di AEM per i server delle applicazioni. Tuttavia, è possibile estrarlo dalla distribuzione AEM Jar e utilizzarlo con la configurazione del server applicazione:

  1. Innanzitutto, scaricate il AEM file quickstart ed estraetelo:

    java -jar aem-quickstart-6.2.0.jar -unpack
    
  2. Andate al percorso del AEM rapido decompresso di recente e copiate la cartella crx-quickstart/opt/notsoserial/ nella cartella crx-quickstart dell'installazione del server dell'applicazione AEM.

  3. Modificare la proprietà di /opt per l'utente che esegue il server:

    chown -R opt <user running the server>
    
  4. Configurate e verificate che l'agente sia stato attivato correttamente, come illustrato nelle sezioni seguenti di questo articolo.

Configurazione dell'agente

La configurazione predefinita è adeguata per la maggior parte delle installazioni. Ciò include un elenco Bloccati di classi vulnerabili di esecuzione remota conosciute e un elenco consentiti di pacchetti in cui la deserializzazione dei dati attendibili dovrebbe essere relativamente sicura.

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

  1. Passate alla console Web all'indirizzo https://server:port/system/console/configMgr

  2. Ricerca e clic su Configurazione firewall di deserializzazione.

    NOTA

    Potete inoltre accedere direttamente alla pagina di configurazione accedendo all’URL all’indirizzo:

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

Questa configurazione contiene il elenco consentiti , il elenco Bloccati e la registrazione della deserializzazione.

Consenti elenco

Nella sezione Consenti elenco, si tratta di classi o prefissi di pacchetti che saranno consentiti per la deserializzazione. È importante tenere presente che se si deserializzano le classi, sarà necessario aggiungere le classi o i pacchetti a questo elenco consentiti .

Elenco dei blocchi

Nella sezione elenco blocchi sono incluse le classi che non possono essere deserializzate. La serie iniziale di queste classi è limitata alle classi che sono state trovate vulnerabili agli attacchi di esecuzione remota. Il elenco Bloccati viene applicato prima di qualsiasi voce di elenco di tipo Consenti.

Registrazione diagnostica

Nella sezione per la registrazione diagnostica, potete scegliere diverse opzioni di registrazione quando viene eseguita la deserializzazione. Questi vengono registrati solo per il primo utilizzo e non vengono registrati di nuovo per gli usi successivi.

Il valore predefinito di class-name-only vi informerà delle classi che vengono deserializzate.

Potete anche impostare l'opzione full-stack che consente di registrare uno stack Java del primo tentativo di deserializzazione per informarvi in quale punto si trova la deserializzazione. Questo può essere utile per trovare e rimuovere la deserializzazione dall’utilizzo.

Verifica dell'attivazione dell'agente

Per verificare la configurazione dell'agente di deserializzazione, andate all'URL all'indirizzo:

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

Una volta effettuato l'accesso all'URL, viene visualizzato un elenco di controlli di integrità relativi all'agente. È possibile determinare se l'agente è attivato correttamente verificando che i controlli di integrità siano superati. In caso di errore, potrebbe essere necessario caricare l'agente manualmente.

Per ulteriori informazioni sulla risoluzione dei problemi con l'agente, vedere Gestione degli errori con caricamento dinamico dell'agente di seguito.

NOTA

Se aggiungete org.apache.commons.collections.functors al elenco consentiti , il controllo dello stato di salute avrà sempre esito negativo.

Gestione degli errori con caricamento dell'agente dinamico

Se nel registro sono riportati degli errori o i passaggi di verifica rilevano un problema durante il caricamento dell'agente, potrebbe essere necessario caricare l'agente manualmente. Questo è consigliato anche nel caso in cui si utilizzi un JRE (Java Runtime Environment) invece di un JDK (Java Development Toolkit), poiché gli strumenti per il caricamento dinamico non sono disponibili.

Per caricare l'agente manualmente, seguire le istruzioni riportate di seguito:

  1. Modificate i parametri di avvio JVM del Jar CQ, aggiungendo la seguente opzione:

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

    Questo richiede l'utilizzo dell'opzione -nofork CQ/AEM, insieme alle impostazioni di memoria JVM appropriate, in quanto l'agente non sarà abilitato su una JVM biforcata.

    NOTA

    La distribuzione Adobe del Jar agente NotSoSerial si trova nella cartella crx-quickstart/opt/notsoserial/ dell'installazione AEM.

  2. Arrestare e riavviare la JVM;

  3. Verificare nuovamente l'attivazione dell'agente seguendo i passaggi descritti in Verifica dell'attivazione dell'agente.

Altre considerazioni

Se si è in esecuzione su una JVM IBM, consultare la documentazione relativa al supporto per l'API Java Attach in questo percorso.

In questa pagina