Show Menu
SUJETS×

Réduction des problèmes de sérialisation dans AEM

Présentation

L’équipe d’AEM chez Adobe travaille en étroite collaboration avec le projet NotSoSerial open source pour limiter les vulnérabilités décrites dans CVE-2015-7501 . NotSoSerial est accordé sous licence Apache 2 et comprend du code ASM accordé sous sa propre licence de type BSD .
Le fichier JAR d’agent inclus dans ce module est la distribution de NotSoSerial modifiée par Adobe.
NotSoSerial est une solution de niveau Java à un problème de niveau Java, et il n’est pas spécifique à AEM. Il ajoute un contrôle en amont à une tentative de désérialisation d’un objet. Cette vérification testera un nom de classe par rapport à une liste autorisée et/ou une liste bloquée de type pare-feu. En raison du nombre limité de classes dans la liste bloquée par défaut, il est peu probable que cela ait un impact sur vos systèmes ou votre code.
Par défaut, l'agent effectue une vérification de liste bloquée des classes vulnérables connues actuelles. Cette liste bloquée est destinée à vous protéger de la liste actuelle d'exploits qui utilisent ce type de vulnérabilité.
The block list and allow list can be configured by following the instructions in the Configuring the Agent section of this article.
L’agent est conçu pour vous aider à limiter les dernières classes vulnérables connues. Si votre projet désérialise des données non approuvées, il peut être vulnérable aux attaques par déni de service, aux attaques de mémoire insuffisante et aux futures attaques inconnues de désérialisation.
Adobe prend officiellement en charge Java 6, 7 et 8, toutefois, il semble que NotSoSerial prend également en charge Java 5.

Installation de l’agent

Si vous avez déjà installé le correctif de sérialisation pour AEM 6.1, supprimez les commandes de démarrage de l’agent de la ligne d’exécution Java.
  1. Installez le lot com.adobe.cq.cq-serialization-tester .
  2. Accédez à la console Web du lot à l'adresse https://server:port/system/console/bundles
  3. Recherchez le lot de sérialisation et démarrez-le. Cela devrait charger automatiquement et dynamiquement l’agent NotSoSerial.

Installation de l’agent sur les serveurs d’applications

L’agent NotSoSerial n’est pas inclus dans la distribution standard d’AEM pour les serveurs d’applications. Cependant, vous pouvez l’extraire du fichier de distribution JAR d’AEM et l’utiliser avec la configuration de votre serveur d’applications :
  1. Tout d’abord, téléchargez le fichier QuickStart AEM et extrayez-le :
    java -jar aem-quickstart-6.2.0.jar -unpack
    
    
  2. Go to the location of the newly unzipped AEM quickstart, and copy the crx-quickstart/opt/notsoserial/ folder to the crx-quickstart folder of the AEM application server installation.
  3. Change the ownership of /opt to the user running the server:
    chown -R opt <user running the server>
    
    
  4. Configurez l’agent et vérifiez qu’il a été correctement activé, comme indiqué dans les sections suivantes de cet article.

Configuration de l’agent

La configuration par défaut est appropriée pour la plupart des installations. Cela inclut une liste bloquée de classes vulnérables connues d'exécution à distance et une liste autorisée de paquets où la désérialisation de données fiables devrait être relativement sûre.
La configuration de pare-feu est dynamique et peut être changée à tout moment en :
  1. Going to the Web Console at https://server:port/system/console/configMgr
  2. recherchant Configuration du pare-feu de désérialisation et en cliquant dessus.
    Vous pouvez également atteindre la page de configuration directement en accédant à l’URL :
    • https://server:port/system/console/configMgr/com.adobe.cq.deserfw.impl.DeserializationFirewallImpl
Cette configuration contient la journalisation de la liste autorisée, de la liste bloquée et de la désérialisation.
Autoriser la liste
Dans la section permettant la mise en vente, il s’agit de classes ou de préfixes de package qui seront autorisés pour la désérialisation. Il est important de savoir que si vous désérialisez les classes vous-même, vous devrez ajouter les classes ou les paquets à cette liste autorisée.
Liste des blocs
Dans la section de liste des blocs, il y a des classes qui ne sont jamais autorisées pour la désérialisation. L’ensemble initial de ces classes est limité à celles qui sont considérées comme vulnérables aux attaques d’exécution à distance. La liste bloquée est appliquée avant toute entrée répertoriée autorisée.
Journalisation du diagnostic
Dans la section relative à la journalisation des diagnostics, vous pouvez choisir plusieurs options de connexion lors de la désérialisation. Les désérialisations sont uniquement consignées lors de la première utilisation, elles ne le sont pas pour les utilisations suivantes.
La valeur par défaut class-name-only vous notifie les classes qui sont désérialisées.
Vous pouvez également définir l’option full-stack qui consigne une pile Java de la première tentative de désérialisation afin de vous informer lorsque votre désérialisation a lieu. Cela peut être utile pour rechercher et supprimer la désérialisation de votre utilisation.

Vérification de l’activation de l’agent

Vous pouvez vérifier la configuration de l’agent de désérialisation en accédant à l’URL :
  • https://server:port/system/console/healthcheck?tags=deserialization
Lorsque vous accédez à l’URL, la liste des contrôles de l’intégrité associés à l’agent s’affiche. Vous pouvez déterminer si l’agent est correctement activé en vérifiant la réussite des contrôles de l’intégrité. S’ils échouent, vous pouvez être amené à charger l’agent manuellement.
Pour plus d’informations sur la résolution des incidents avec l’agent, voir Gestion des erreurs lors du chargement dynamique de l’agent ci-dessous.
If you add org.apache.commons.collections.functors to the allow list, the health check will always fail.

Gestion des erreurs lors du chargement dynamique de l’agent

Si des erreurs sont exposées dans le journal, ou si les étapes de vérification détectent un problème lors du chargement de l’agent, vous devrez peut-être charger l’agent manuellement. Cela est également recommandé au cas où vous utilisez un JRE (Java Runtime Environment) plutôt qu’un JDK (Java Development Toolkit), dans la mesure où les outils pour le chargement dynamique ne sont pas disponibles.
Pour charger l’agent manuellement, suivez les instructions ci-dessous :
  1. Modifiez les paramètres de démarrage de la JVM du fichier JAR de CQ, en ajoutant l’option suivante :
    -javaagent:<aem-installation-folder>/crx-quickstart/opt/notsoserial/notsoserial.jar
    
    
    Pour cela, utilisez également l’option -nofork de CQ/d’AEM, avec les paramètres appropriés de mémoire JVM, car l’agent ne sera pas activé sur une JVM divisée.
    The Adobe distribution of the NotSoSerial agent jar can be found in the crx-quickstart/opt/notsoserial/ folder of your AEM installation.
  2. Arrêtez et redémarrez la JVM.
  3. Vérifiez à nouveau l’activation de l’agent en suivant les étapes décrites ci-dessus dans Vérification de l’activation de l’agent .

Autres considérations

Si vous exécutez sur une JVM IBM, voir la documentation sur la prise en charge de l’API Attach Java à cet emplacement .