Show Menu
TÓPICOS×

Como mitigar problemas de serialização no AEM

Visão geral

A equipe do AEM na Adobe tem trabalhado em conjunto com o projeto de código aberto NotSoSerial para ajudar a atenuar 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 semelhante a BSD.
O jar do agente incluído neste pacote é a distribuição modificada pela Adobe de NotSoSerial.
NotSoSerial é uma solução de nível Java para um problema de nível Java e não é específica do AEM. Ela adiciona uma verificação de comprovação a uma tentativa de desserializar um objeto. Essa verificação testará um nome de classe em uma lista de permissões e/ou lista de negação no estilo de firewall. Devido ao número limitado de classes na lista negra padrão, é improvável que isso tenha impacto em seus sistemas ou códigos.
Por padrão, o agente fará uma verificação de lista negra em relação às classes vulneráveis conhecidas atuais. Esta lista negra tem como objetivo proteger você da lista atual de explorações que usam esse tipo de vulnerabilidade.
A lista negra 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.
A Adobe oferece suporte oficial ao Java 6, 7 e 8, no entanto nossa compreensão é que o NotSoSerial também oferece suporte ao Java 5.

Instalação do agente

Se você instalou anteriormente a correção de serialização para o AEM 6.1, remova os comandos de inicialização do 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 inicie-o. Isso deve carregar automaticamente dinamicamente o agente NotSoSerial.

Instalação do agente em servidores de aplicativos

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 do AEM jar 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:
    java -jar aem-quickstart-6.2.0.jar -unpack
    
    
  2. Vá para o local da inicialização rápida do AEM recém-descompactado e copie a crx-quickstart/opt/notsoserial/ pasta para a crx-quickstart pasta da instalação do servidor de aplicativos AEM.
  3. Altere a propriedade de /opt para o usuário que está executando 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 negra de classes vulneráveis de execução remota conhecidas e uma lista de permissões de pacotes em que 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 desserializaçã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 a lista de permissões, a lista negra e o registro de desserialização.
Lista branca
Na seção da lista de permissões, essas são classes ou prefixos de pacote que serão permitidos para a 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.
Listas negras
Na seção de lista negra estão 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 negra é aplicada antes de qualquer entrada na lista de permissões.
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ó estã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 de pilha ​completa 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.

Verificação da 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 Manuseio de erros com carregamento de agente dinâmico abaixo.
Se você adicionar org.apache.commons.collections.functors à lista de permissões, a verificação de integridade sempre falhará.

Tratamento de erros com carregamento de agente dinâmico

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 (Java Runtime Environment) 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
    
    
    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.
    A distribuição da Adobe do jar do agente NotSoSerial pode ser encontrada na crx-quickstart/opt/notsoserial/ pasta 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 IBM JVM, consulte a documentação sobre suporte para a API Java Attach neste local .