Redução de problemas de serialização no AEM mitigating-serialization-issues-in-aem

Visão geral overview

A equipe do AEM na Adobe trabalhou em conjunto com o projeto de código aberto NotSoSerial para ajudar a mitigar as vulnerabilidades descritas em CVE-2015-7501. NotSoSerial é licenciado sob a licença do Apache 2 e inclui o código ASM licenciado sob sua própria licença semelhante à BSD.

O jar do agente incluído neste pacote é a distribuição modificada do NotSoSerial pela Adobe.

NotSoSerial é uma solução em nível Java™ para um problema em nível Java™ e não é específica da AEM. Ele adiciona uma verificação de comprovação a uma tentativa de desserializar um objeto. Essa verificação testa um nome de classe em relação a um incluir na lista de permissões incluo na lista de bloqueios de estilo firewall, ou, ou ambos. Devido ao número limitado de classes no incluo na lista de bloqueios padrão, é improvável que esse teste afete seus sistemas ou códigos.

Por padrão, o agente executa uma verificação de inclui na lista de bloqueios em relação às classes vulneráveis conhecidas no momento. Essa inclui na lista de bloqueios destina-se a protegê-lo da lista atual de explorações que usam esse tipo de vulnerabilidade.

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

O agente deve ajudar a reduzir as classes vulneráveis conhecidas mais recentes. 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 insuficiente e explorações desconhecidas de desserialização futuras.

A Adobe oferece suporte oficial ao Java™ 6, 7 e 8. No entanto, a Adobe sabe que o NotSoSerial também é compatível com o Java™ 5.

WARNING
NotSoSerial não deve ser usado com o Java™ 17 ou superior.

Instalar o agente installing-the-agent

NOTE
Se você tiver instalado anteriormente a correção de serialização para o AEM 6.1, remova os comandos de início do agente da linha de execução do Java™.
  1. Instale o pacote com.adobe.cq.cq-serialization-tester.

  2. Ir para o Console da Web do Pacote em https://server:port/system/console/bundles

  3. Procure o pacote de serialização e inicie-o. Isso faz com que o carregue automaticamente o agente NotSoSerial.

Instalando o Agente nos Servidores de Aplicações installing-the-agent-on-application-servers

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

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

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

  3. Alterar a propriedade de /opt para o usuário que está executando o servidor:

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

Configurar o agente configuring-the-agent

A configuração padrão é adequada para a maioria das instalações. Incluir na lista de bloqueios Essa configuração inclui um incluo na lista de permissões de classes vulneráveis conhecidas de execução remota e um grupo de pacotes em que a desserialização de dados confiáveis é segura.

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

  1. Acessando o Console da Web em https://server:port/system/console/configMgr

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

    note note
    NOTE
    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 incluo na lista de permissões, de inclui na lista de bloqueios e de desserialização.

Permitir Listagem

Na seção lista de permissões, essas listagens são classes ou prefixos de pacote permitidos para desserialização. Se você estiver desserializando suas próprias classes, adicione as classes ou pacotes a esse incluo na lista de permissões.

Listagem de Bloqueios

Na seção de listagem de blocos, há classes que nunca têm permissão para desserialização. O conjunto inicial dessas classes é limitado às classes que foram consideradas vulneráveis a ataques de execução remota. A inclui na lista de bloqueios ➡ é aplicada antes de qualquer entrada na lista de permissões.

Log de Diagnóstico

Na seção para logs de diagnóstico, você pode escolher várias opções para registrar quando a desserialização estiver ocorrendo. Essas opções só são registradas no primeiro uso e não são registradas novamente em usos subsequentes.

O padrão class-name-only informa as classes que estão sendo desserializadas.

Você também pode definir a opção pilha completa, que registra uma pilha do Java™ da primeira tentativa de desserialização para informar onde a desserialização está ocorrendo. Essa opção é útil para encontrar e remover a desserialização do seu uso.

Verificando a ativação do agente verifying-the-agent-s-activation

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 é exibida. Você pode determinar se o agente está ativado corretamente, verificando se as verificações de integridade estão sendo bem-sucedidas. Se eles estiverem falhando, você deve carregar o agente manualmente.

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

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

Manipular erros com o carregamento dinâmico do agente handling-errors-with-dynamic-agent-loading

Se erros forem expostos no registro ou se as etapas de verificação detectarem um problema ao carregar o agente, carregue o agente manualmente. Esse fluxo de trabalho também é recomendado se você usar um JRE (Java™ Runtime Environment) em vez de um JDK (Java™ Development Toolkit), porque as ferramentas para carregamento dinâmico não estão disponíveis.

Para carregar o agente manualmente, faça o seguinte:

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

    code language-shell
    -javaagent:<aem-installation-folder>/crx-quickstart/opt/notsoserial/notsoserial.jar
    
    note note
    NOTE
    Exige que você use a opção -nofork CQ/AEM também, juntamente com as configurações de memória JVM apropriadas, pois o agente não está ativado em uma JVM bifurcada.
    note note
    NOTE
    A distribuição Adobe do jar do agente NotSoSerial pode ser encontrada na pasta crx-quickstart/opt/notsoserial/ da sua instalação do AEM.
  2. Interrompa e reinicie 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 other-considerations

Se você estiver executando em uma IBM® JVM, reveja a documentação de suporte da API Java™ Attach em este local.

recommendation-more-help
51c6a92d-a39d-46d7-8e3e-2db9a31c06a2