VMware – Log4j Sicherheitslücke im vCenter mit Workaround schließen

Vor wenigen Tagen wurde eine gravierende Sicherheitslücke in der Java Bibliothek Log4j bekannt, welche Millionen von Geräten und Softwareanwendungen akut gefährdet.

Das BSI stuft diese Lücke auf der CVSS-Skala mit dem höchstmöglichen Wert 10 (CVE-2021-44228) ein.

Bis es zu flächendeckenden Patches durch die Hersteller kommt, existieren bereits erste Workarounds für verschiedenste Produkte.

Auch das vCenter von VMware ist von dieser Sicherheitslücke betroffen – ESXI nicht!

In diesem Beitrage möchte ich den VMware vCenter Workaround erläutern.

Hinweis: Alles auf eigene Gefahr!

Lösung

Gültig für:

  • vCenter 7.0 GA, 7.0.0a, 7.0.0b, 7.0.0c, 7.0.0d
  • vCenter 7.0 Update 1, U1a, U1c, U1d
  • vCenter 7.0 Update 3, 3a
  • vCenter 7.0 Update 2, 2a, 2b, 2c, 2d

Lösungen für vCenter 6.7, 6.5 und 6.0 sind im verlinkten VMware KB-Artikel beschrieben. Das Vorgehen ist fast identisch.

Eine SSH-Verbindung mit dem vCenter (z. B. via Putty) aufbauen.

Via Putty mit dem vCenter verbinden

Eventuelle Zertifikatswarnungen bestätigen.

Putty vCenter Zertifikatswarnung bestätigen

In der SSH-Sitzung als Root anmelden und mit dem Befehl Shell den Shell-Zugriff aktivieren.

Die vCenter Shell aktivieren

vMON-Dienst

Die bestehende Java-wrapper-vmon Datei sichern.

cp -rfp /usr/lib/vmware-vmon/java-wrapper-vmon /usr/lib/vmware-vmon/java-wrapper-vmon.bak
Log4j im vCenter beheben

Anschließend diese im VI-Editor öffnen und mit a in den Bearbeitungsmodus wechseln.

vi /usr/lib/vmware-vmon/java-wrapper-vmon

Dort die letzte Zeile löschen

exec $java_start_bin $jvm_dynargs $security_dynargs $original_args

..und folgende zwei Zeilen einfügen:

log4j_arg="-Dlog4j2.formatMsgNoLookups=true"
exec $java_start_bin $jvm_dynargs $log4j_arg $security_dynargs $original_args

Hinweis: Die zwei oberen Zeilen beziehen sich auf :

  • vCenter 7.0 Update 3, 3a
  • vCenter 7.0 Update 2, 2a, 2b, 2c, 2d

Für die unteren vCenter-Versionen gilt:

  • vCenter 7.0 GA, 7.0.0a, 7.0.0b, 7.0.0c, 7.0.0d
  • vCenter 7.0 Update 1, U1a, U1c, U1d
//Löschen
exec $java_start_bin $jvm_dynargs "$@"

//Einfügen
log4j_arg="-Dlog4j2.formatMsgNoLookups=true"
exec $java_start_bin $jvm_dynargs $log4j_arg "$@"

Mit ESC den Bearbeitungsmodus verlassen und mit :wq das Dokument speichern und den Editor verlassen.

Log4j im vCenter beheben

Die Berechtigungen der Datei anpassen.

chown root:cis /usr/lib/vmware-vmon/java-wrapper-vmon
chmod 754 /usr/lib/vmware-vmon/java-wrapper-vmon
Log4j im vCenter beheben

Alle vCenter Dienste neu starten.

service-control --stop --all
service-control --start --all
Log4j im vCenter beheben

Update Manager Dienst

Die bestehende start.ini sichern.

cp -rfp /usr/lib/vmware-updatemgr/bin/jetty/start.ini /usr/lib/vmware-updatemgr/bin/jetty/start.ini.bak
Log4j im vCenter beheben

Wieder die Datei im VI-Editor öffnen und mit a in den Bearbeitungsmodus wechseln.

vi /usr/lib/vmware-updatemgr/bin/jetty/start.ini

Dort anschließend folgende Zeile am Ende des Dokuments einfügen, den Bearbeitungsmodus beenden und speichern.

-Dlog4j2.formatMsgNoLookups=true
Log4j im vCenter beheben

Neustart des Update Manager Dienstes.

service-control --restart vmware-updatemgr
Log4j im vCenter beheben

Analytics Dienst

Sichern der bestehenden log4j-core-2.8.2.jar Datei.

log4j-core-2.8.2.jarcp -rfp /usr/lib/vmware/common-jars/log4j-core-2.8.2.jar /usr/lib/vmware/common-jars/log4j-core-2.8.2.jar.bak

Die Klasse deaktivieren.

zip -q -d /usr/lib/vmware/common-jars/log4j-core-2.8.2.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

Den Analytics Dienst neu starten.

service-control --restart vmware-analytics
Log4j im vCenter beheben

DBCC Dienstprogramm

Die bestehende log4j-core-2.8.2.jar Datei sichern.

cp /usr/lib/vmware-dbcc/lib/log4j-core-2.8.2.jar /usr/lib/vmware-dbcc/lib/log4j-core-2.8.2.jar.bak

Anschließend ebenfalls deaktivieren.

zip -q -d /usr/lib/vmware-dbcc/lib/log4j-core-2.8.2.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
Log4j im vCenter beheben

Hinweis: Falls die Meldung „zip error: Nothing to do!“ erscheint, war dieser Schritt nicht notwendig, da DBCC nicht verwendet wird.

Schritte verifizieren

vMON Dienst:

Der Eintrag -Dlog4j2.formatMsgNoLookups=true muss in der Ausgabe des folgenden Befehls erscheinen.

ps auxww | grep formatMsgNoLookups
Log4j im vCenter beheben

Update Manager Dienst:

Nach Eingabe des unteren Befehls, muss unter Properities der Eintrag log4j2.formatMsgNoLookups = true vorhanden sein.

cd /usr/lib/vmware-updatemgr/bin/jetty/
java -jar start.jar --list-config
Log4j im vCenter beheben

Analytics Dienst und DBCC Dienstprogramm:

Die Ausgabe beider Befehle muss 0 ergeben.

grep -i jndilookup /usr/lib/vmware/common-jars/log4j-core-2.8.2.jar | wc -l
grep -i jndilookup /usr/lib/vmware-dbcc/lib/log4j-core-2.8.2.jar | wc -l
Log4j im vCenter beheben

Zum Abschluss der Arbeiten kann die Shell-Sitzung mit exit beendet und die SSH-Verbindung geschlossen werden.

Log4j im vCenter beheben

Damit ist das vCenter, bis zum Erscheinen von Patches, gegen die Log4j Sicherheitslücke gerüstet.