
Ein Kubernetes DaemonSet, das einen JVM-Level-Hotpatch bereitstellt, um Log4j2 CVE-2021-44228 zu entschärfen, indem es JNDI-Lookups in allen Containern und Host-JVMs deaktiviert.
Dieses Projekt wird wie unten beschrieben eingestellt.
Das Projekt wird ab dem 01.01.2023 keine Issues mehr akzeptieren und nicht mehr aktualisiert. Nach diesem Datum wird dieses Projekt nicht mehr unterstützt und es werden keine neuen Releases oder mit diesem Projekt verbundene Artefakte mehr erstellt.
Das Projekt-Repository wird am 01.04.2023 dauerhaft archiviert (schreibgeschützt gemacht).
Wie in der ursprünglichen Projektdokumentation vermerkt, war dies immer als vorübergehende Maßnahme zur Unterstützung von Kubernetes-Nutzern gedacht und bot nur eine teilweise Abschwächung der Sicherheitsrisiken von Log4j2 CVE-2021-44228 und CVE-2021-45046. Es wird dringend empfohlen, dass alle Log4j-Benutzer auf eine gepatchte Version des Projekts aktualisieren, um alle mit diesen CVEs verbundenen Risiken vollständig zu mindern.
Die Release-Artefakte, die mit der neuesten Version verbunden sind, bleiben für Verbraucher dieses Projekts, die es weiterhin in ihren Kubernetes-Umgebungen bereitstellen, dauerhaft verfügbar. Insbesondere das DaemonSet-Manifest und das ECR Public Container-Image bleiben nach der Einstellung verfügbar, werden aber nicht mehr unterstützt oder aktualisiert.
AWS hat ein RPM entwickelt, das einen Hot-Patch auf JVM-Ebene durchführt, der JNDI-Lookups aus der Log4j2-Bibliothek deaktiviert und so Log4j2 CVE-2021-44228 und CVE-2021-45046 entschärft.
Der Apache Log4j2 CVE-2021-44228 node agent ist ein Open-Source-Projekt, das vom Kubernetes-Team bei AWS entwickelt wurde. Es ist als DaemonSet konzipiert, um die Auswirkungen von Log4j2 CVE-2021-44228 zu mildern, der Anwendungen betrifft, die Apache Log4j2 Versionen < 2.15.0 ausführen, wenn Eingaben aus nicht vertrauenswürdigen Quellen verarbeitet werden. Die Ausführung dieses DaemonSets patcht JVMs, die sowohl in Containern als auch auf dem Host laufen.
Was es tut: Auf jedem Worker-Node wird ein Cron-Eintrag installiert, der einen Prozess ausführt, der nach laufenden JVMs sucht und einen Agenten injiziert, der den Log4j2-CVE entschärft. Alle JVMs, einschließlich derer in Containern, werden auf diese Weise gehotpatcht. Der Hot-Patch-Prozess ist derzeit so konfiguriert, dass er alle 30 Minuten mit einer 15-minütigen Jitter ausgeführt wird. Das effektive Zeitfenster kann zwischen 15 und 45 Minuten zwischen den Durchläufen liegen.
Hinweis: Weitere Informationen zur Log4j2-Sicherheitslücke und AWS-Reaktion finden Sie im AWS Security Bulletin.
Hinweis: Am 20.04.22 wurde das Image (v0.0.16) mit dem neuesten Patch für Amazon Linux 1 und 2 aktualisiert. Wenn Sie eine vorherige Version dieses DaemonSets installiert haben und es noch ausgeführt wird, sollten Sie die Datei daemonset.yaml erneut anwenden, um das neueste RPM zu installieren. Wenn Sie den Log4j-Patch nicht mehr benötigen, sollten Sie das DaemonSet löschen und das RPM deinstallieren, da ältere Versionen des RPM (< 1.1-16) eine Sicherheitslücke aufwiesen, die es einem Angreifer ermöglichen könnte, aus einem Container auszubrechen und Zugriff auf den zugrunde liegenden Host zu erhalten.
Hinweis: Version 1.3-5 adressiert ALAS2-2022-1806 und ALAS-2022-1601. Weitere Informationen finden Sie unter Amazon Linux "log4j hotpatch" <1.3-5 local privilege escalation to root.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/kubernetes-log4j-cve-2021-44228-node-agent/main/daemonset.yaml
Stichprobenartig einen einzelnen Pod überprüfen:
kubectl get pods -l job=node-patch-installer -n node-configuration-daemonset
kubectl logs <pod-name> -c node-patch-installer -n node-configuration-daemonset
oder Bestätigung für jeden Node erhalten:
kubectl logs -l job=node-patch-installer -c node-patch-installer -n node-configuration-daemonset | grep 'installed'
Wenn die Installation erfolgreich war, lautet die letzte Zeile in der Logdatei installed and verified, andernfalls wird ein Fehler protokolliert.
DaemonSet spec.template.spec.initContainers.image in der Datei daemonset.yaml, um die neue URI:Tag des Images widerzuspiegeln, und wenden Sie dann das Manifest auf Ihren Cluster an.Apache Log4j2 < 2.15.0 JNDI-Funktionen, die in Konfigurationen, Logmeldungen und Parametern verwendet werden, schützen nicht vor Angreifer-kontrollierten LDAP- und anderen JNDI-bezogenen Endpunkten. Ein Angreifer, der Logmeldungen oder Logmeldungsparameter kontrollieren kann, kann beliebigen Code ausführen, der von LDAP-Servern geladen wird, wenn die Nachrichten-Lookup-Substitution aktiviert ist. Ab Log4j2 Versionen < 2.15.0 ist dieses Verhalten standardmäßig deaktiviert. Vollständige Details finden Sie im CVE-Bulletin.
Weitere Informationen zur Log4j2-Sicherheitslücke finden Sie im AWS Security Bulletin.
AWS hat ein RPM entwickelt, das einen Hot-Patch auf JVM-Ebene durchführt, der JNDI-Lookups aus der Log4j2-Bibliothek deaktiviert und so das Log4j2-Problem für JVMs auf dem Host sowie für JVMs in Containern entschärft. Dieses Projekt verpackt das RPM als Kubernetes DaemonSet.
Bei der Installation wird auf jedem Worker-Node ein Prozess ausgeführt, der nach laufenden JVMs sucht und einen Agenten in die JVM injiziert, um die Log4j2-Sicherheitslücke zu entschärfen. Der Agent versucht, die lookup()-Methode aller geladenen org.apache.logging.log4j.core.lookup.JndiLookup-Instanzen zu patchen, um bedingungslos den String Patched JndiLookup::lookup() zurückzugeben. Dies soll die CVE-2021-44228 Schwachstelle zur Codeausführung aus der Ferne in Log4j2 beheben, ohne den Java-Prozess neu starten zu müssen.
Dieser Prozess ist standardmäßig so konfiguriert, dass er alle 30 Minuten läuft, und bietet eine zusätzliche Schutzschicht in Clustern, in denen Anwendungen noch nicht mit einer aktualisierten Log4j2-Abhängigkeit gepatcht wurden.
Weitere Details zum Hotpatch finden Sie im AWS Open Source Blog.
Das Container-Image wird im aws-containers ECR Public Repository gehostet.