Como mitigar problemas de serialização em AEM

Visão geral

A equipe AEM no Adobe tem trabalhado em conjunto com o projeto de código aberto NotSoSerial para ajudar a mitigar as vulnerabilidades descritas em CVE-2015-7501. O NotSoSerial está licenciado sob a licença do Apache 2 e inclui o código ASM licenciado sob sua própria licença do tipo BSD.

O agente incluído neste pacote é uma distribuição de Adobe de vidro modificada de NotSoSerial.

NotSoSerial é uma solução de nível Java para um problema de nível Java e não AEM específico. Ela adiciona uma verificação de comprovação a uma tentativa de desserializar um objeto. Essa verificação testará um nome de classe em relação a uma lista de permissões e/ou lista de bloqueios no estilo firewall. Devido ao número limitado de classes na lista de bloqueios padrão, é improvável que isso tenha um impacto em seus sistemas ou códigos.

Por padrão, o agente fará uma verificação de lista de bloqueios em relação às classes vulneráveis conhecidas atuais. Esta lista de bloqueios tem o objetivo de protegê-lo da lista atual de explorações que usam esse tipo de vulnerabilidade.

A lista de bloqueios e a lista de permissões podem ser configuradas seguindo as instruções na seção Configuração do Agente deste artigo.

O agente deve ajudar a atenuar as classes vulneráveis mais recentes conhecidas. Se o seu projeto estiver desserializando dados não confiáveis, ele ainda poderá estar vulnerável a ataques de negação de serviço, ataques de memória esgotados e explorações de desserialização futuras desconhecidas.

O Adobe oferece suporte oficial ao Java 6, 7 e 8, mas entendemos que o NotSoSerial também oferece suporte ao Java 5.

Instalando o Agente

OBSERVAÇÃO

Se você instalou anteriormente a correção de serialização para AEM 6.1, remova os comandos do start agente da linha de execução java.

  1. Instale o pacote com.adobe.cq.cq-serialization-tester.

  2. Vá para o console Web do pacote em https://server:port/system/console/bundles

  3. Procure o pacote de serialização e start-o. Isso deve carregar automaticamente dinamicamente o agente NotSoSerial.

Instalando o agente nos servidores de aplicativos

O agente NotSoSerial não está incluído na distribuição padrão de AEM para servidores de aplicativos. No entanto, você pode extraí-la da distribuição AEM jar e usá-la com a configuração do servidor de aplicativos:

  1. Primeiro, baixe o arquivo de início rápido AEM e extraia-o:

    java -jar aem-quickstart-6.2.0.jar -unpack
    
  2. Vá para o local do AEM recém-descompactado e copie a pasta crx-quickstart/opt/notsoserial/ para a pasta crx-quickstart da instalação do servidor de aplicativos AEM.

  3. Altere a propriedade de /opt para o usuário que executa o servidor:

    chown -R opt <user running the server>
    
  4. Configure e verifique se o agente foi ativado corretamente, como mostrado nas seções a seguir deste artigo.

Configurar o agente

A configuração padrão é adequada para a maioria das instalações. Isso inclui uma lista de bloqueios de classes vulneráveis de execução remota conhecida e uma lista de permissões de pacotes nos quais a desserialização de dados confiáveis deve ser relativamente segura.

A configuração do firewall é dinâmica e pode ser alterada a qualquer momento por:

  1. Ir para o Web Console em https://server:port/system/console/configMgr

  2. Procurando e clicando em Configuração do Firewall de Deserialização.

    OBSERVAÇÃO

    Você também pode acessar a página de configuração diretamente acessando o URL em:

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

Essa configuração contém o registro de lista de permissões, lista de bloqueios e desserialização.

Permitir listagem

Na seção de listagem de permissões, essas são classes ou prefixos de pacote que serão permitidos para desserialização. É importante estar ciente de que, se você estiver desserializando classes próprias, precisará adicionar as classes ou pacotes a essa lista de permissões.

Lista de bloqueios

Na seção de listagem de blocos, há classes que nunca são permitidas para desserialização. O conjunto inicial dessas classes está limitado a classes que foram consideradas vulneráveis a ataques de execução remota. A lista de bloqueios é aplicada antes de qualquer entrada listada.

Registro de diagnóstico

Na seção para registro em log de diagnóstico, você pode escolher várias opções para registrar quando a desserialização estiver ocorrendo. Eles só são conectados na primeira utilização e não são registrados novamente em utilizações subsequentes.

O padrão de class-name-only informará as classes que estão sendo desserializadas.

Você também pode definir a opção pilha cheia que registrará uma pilha java da primeira tentativa de desserialização para informá-lo onde sua desserialização está ocorrendo. Isso pode ser útil para localizar e remover a desserialização de seu uso.

Verificando a Ativação do agente

Você pode verificar a configuração do agente de desserialização navegando até o URL em:

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

Após acessar o URL, uma lista de verificações de integridade relacionadas ao agente será exibida. Você pode determinar se o agente está ativado corretamente verificando se as verificações de integridade estão sendo bem-sucedidas. Se estiverem falhando, talvez seja necessário carregar o agente manualmente.

Para obter mais informações sobre como solucionar problemas com o agente, consulte Lidar com erros com o carregamento dinâmico de agente abaixo.

OBSERVAÇÃO

Se você adicionar org.apache.commons.collections.functors à lista de permissões, a verificação de integridade sempre falhará.

Tratamento de erros com o agente dinâmico carregando

Se erros forem expostos no registro ou as etapas de verificação detectarem um problema ao carregar o agente, talvez seja necessário carregar o agente manualmente. Isso também é recomendável se você estiver usando um JRE (Ambiente Java Runtime) em vez de um JDK (Java Development Toolkit), já que as ferramentas para carregamento dinâmico não estão disponíveis.

Para carregar o agente manualmente, siga as instruções abaixo:

  1. Modifique os parâmetros de inicialização JVM do jar CQ, adicionando a seguinte opção:

    -javaagent:<aem-installation-folder>/crx-quickstart/opt/notsoserial/notsoserial.jar
    
    OBSERVAÇÃO

    Isso requer o uso da opção -nofork CQ/AEM, juntamente com as configurações de memória JVM apropriadas, já que o agente não será ativado em uma JVM bifurcada.

    OBSERVAÇÃO

    A distribuição de Adobe do jar do agente NotSoSerial pode ser encontrada na pasta crx-quickstart/opt/notsoserial/ da instalação do AEM.

  2. Parar e reiniciar a JVM;

  3. Verifique a ativação do agente novamente seguindo as etapas descritas acima em Verificando a Ativação do agente.

Outras considerações

Se você estiver executando em uma JVM IBM, consulte a documentação sobre suporte para a API Java Attach em this location.

Nesta página

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now