
Kubernetes DaemonSet qui corrige à chaud les JVMs pour atténuer les vulnérabilités Log4j2 (CVE-2021-44228, CVE-2021-45046) en désactivant les recherches JNDI, offrant une protection temporaire jusqu'à la mise à jour des dépendances.
Ce projet est déprécié comme indiqué ci-dessous.
Le projet cessera d'accepter des signalements de problèmes et ne sera plus mis à jour à partir du 2023-01-01. Après cette date, ce projet ne sera plus supporté et aucune nouvelle version ou artefact associé à ce projet ne sera généré.
Le dépôt du projet sera archivé de manière permanente (mis en lecture seule) à partir du 2023-04-01.
Comme mentionné dans la documentation originale du projet, il s'agissait toujours d'une mesure temporaire pour aider les utilisateurs de Kubernetes, et il n'a jamais fourni qu'une atténuation partielle de l'exposition à la sécurité liée à Log4j2 CVE-2021-44228 et CVE-2021-45046. Il est fortement recommandé à tous les utilisateurs de Log4j de mettre à jour vers une version corrigée du projet afin d'atténuer complètement tout risque associé à ces CVE.
Les artefacts de version associés à la dernière version resteront définitivement disponibles pour les consommateurs de ce projet qui continuent de le déployer dans leurs environnements Kubernetes. Plus précisément, le manifeste DaemonSet et l'image conteneur publique ECR resteront disponibles après la dépréciation, mais ne seront plus supportés ni mis à jour.
AWS a développé un RPM qui effectue un hot-patch au niveau JVM qui désactive les recherches JNDI de la bibliothèque Log4j2, atténuant Log4j2 CVE-2021-44228 et CVE-2021-45046.
L'agent de nœud Apache Log4j2 CVE-2021-44228 est un projet open source construit par l'équipe Kubernetes chez AWS. Il est conçu pour fonctionner comme un DaemonSet et atténuer l'impact de Log4j2 CVE-2021-44228, qui affecte les applications utilisant Apache Log4j2 versions < 2.15.0 lors du traitement d'entrées provenant de sources non fiables. L'exécution de ce DaemonSet patchera les JVM fonctionnant dans les conteneurs ainsi que sur l'hôte.
Ce qu'il fait : Une entrée cron sera installée sur chaque nœud worker qui exécute un processus recherchant les JVM en cours d'exécution et injecte un agent qui atténue la CVE Log4J2. Toutes les JVM, y compris celles fonctionnant dans des conteneurs, seront hot-patchées de cette manière. Actuellement, le processus de hot-patch est configuré pour s'exécuter toutes les 30 minutes avec une gigue de 15 minutes. La fenêtre effective peut varier de 15 à 45 minutes entre les exécutions.
Remarque : Vous pouvez trouver des informations supplémentaires sur la vulnérabilité Log4j2 et la réponse d'AWS dans le Bulletin de sécurité AWS.
Remarque : Le 20/04/22, l'image (v0.0.16) a été mise à jour avec le dernier correctif pour Amazon Linux 1 et 2. Si vous avez installé une version précédente de ce DaemonSet et qu'elle est toujours en cours d'exécution, vous devez réappliquer le fichier daemonset.yaml pour installer le dernier RPM. Si vous n'avez plus besoin du correctif log4j, vous devez supprimer le DaemonSet et désinstaller le RPM car les anciennes versions du RPM (< 1.1-16) présentaient une vulnérabilité qui pourrait permettre à un attaquant de s'échapper d'un conteneur et d'accéder à l'hôte sous-jacent.
Remarque : la version 1.3-5 corrige ALAS2-2022-1806 et ALAS-2022-1601. Voir Amazon Linux "log4j hotpatch" <1.3-5 local privilege escalation to root pour plus d'informations.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/kubernetes-log4j-cve-2021-44228-node-agent/main/daemonset.yaml
Vérifiez ponctuellement un seul pod :
kubectl get pods -l job=node-patch-installer -n node-configuration-daemonset
kubectl logs <nom-du-pod> -c node-patch-installer -n node-configuration-daemonset
ou obtenez une confirmation pour chaque nœud :
kubectl logs -l job=node-patch-installer -c node-patch-installer -n node-configuration-daemonset | grep 'installed'
Si l'installation a réussi, la dernière ligne du fichier log indiquera installed and verified, sinon une erreur sera enregistrée.
daemonset.yaml pour refléter la nouvelle URI:tag de l'image, puis appliquez le manifeste à votre cluster.Les fonctionnalités JNDI d'Apache Log4j2 < 2.15.0 utilisées dans la configuration, les messages de log et les paramètres ne protègent pas contre les points de terminaison LDAP et autres liés à JNDI contrôlés par un attaquant. Un attaquant qui peut contrôler les messages de log ou leurs paramètres peut exécuter du code arbitraire chargé depuis des serveurs LDAP lorsque la substitution de recherche de message est activée. À partir de Log4j2 versions < 2.15.0, ce comportement a été désactivé par défaut. Les détails complets se trouvent dans le bulletin CVE.
Vous pouvez trouver des informations supplémentaires sur la vulnérabilité Log4j2 dans le Bulletin de sécurité AWS.
AWS a développé un RPM qui effectue un hot-patch au niveau JVM désactivant les recherches JNDI de la bibliothèque Log4j2, atténuant le problème Log4j2 pour les JVM sur l'hôte ainsi que pour les JVM fonctionnant dans des conteneurs. Ce projet regroupe le RPM sous forme de DaemonSet Kubernetes.
Une fois installé, un processus s'exécutera sur chaque nœud worker qui recherche les JVM en cours d'exécution et injecte un agent dans la JVM pour atténuer la vulnérabilité Log4j2. L'agent tente de patcher la méthode lookup() de toutes les instances chargées de org.apache.logging.log4j.core.lookup.JndiLookup pour retourner inconditionnellement la chaîne Patched JndiLookup::lookup(). Cela est conçu pour corriger la vulnérabilité d'exécution de code à distance CVE-2021-44228 dans Log4j2 sans redémarrer le processus Java.
Ce processus est configuré par défaut pour s'exécuter toutes les 30 minutes, et ajoutera une couche de protection dans les clusters où les applications n'ont pas encore été patchées avec une dépendance Log4j2 mise à jour.
Vous trouverez plus de détails sur le hot-patch dans le blog open source AWS.
L'image conteneur est hébergée dans le dépôt public ECR aws-containers.