Die UniFi Controller-Software verwendet das Java Log4j-Framework für die Protokollierung, zum jetzigen Zeitpunkt wird Log4j 2.13.3 eingesetzt, für UniFi Controller („UniFi Network Application“) Version 6.5.53.
Dieser Beitrag zeigt wie man das Update zu Apache Log4j 2.17.1 durchführt, durch ersetzen der log4j-*.jar Dateien. Das hier beschriebene Vorgehen wurde mit der Unifi Controller-Software Version 6.0.23, 6.0.45 und 6.5.53 erfolgreich umgesetzt.
Sicherheitslücke CVE-2021-44228
Das Log4j-Team wurde auf eine Sicherheitslücke CVE-2021-44228 aufmerksam gemacht, die in Log4j 2.12.2 und Log4j 2.17.1 behoben wurde. Die JNDI-Unterstützung (Java Naming and Directory Interface) von Log4j machte keine einschränkung bei der Namen auflösung. Einige Protokolle sind unsicher oder können eine Remotecodeausführung ermöglichen.
Schadensbegrenzung
In der Version 2.17.1 wurde die Funktion zum Nachschlagen von Nachrichten vollständig entfernt. Lookups in der Konfiguration funktionieren weiterhin. Außerdem deaktiviert Log4j jetzt standardmäßig den Zugriff auf JNDI. JNDI-Lookups in der Konfiguration müssen jetzt explizit aktiviert werden. Außerdem beschränkt Log4j die Protokolle jetzt standardmäßig nur für Java, LDAP beschränkt die Protokolle darauf, nur auf primitive Java-Objekte zuzugreifen. Andere Hosts als der lokale Host müssen explizit zugelassen werden.
Apache Log4j 2 Update für Windows
Um die Log4j 2.17.1 Version für ein Unifi Controller unter Windows 10 und Windows Server 2019 zu installieren (Update), wird eine Eingabeaufforderung (cmd) als Administrator geöffnet, um folgende Befehle auszuführen. Grundsätzlich sind die Befehlszeilen für jede Windows Version, dabei muss anstelle von curl und tar ein Browser für den Download, und Winzip oder 7-Zip zum entpacken verwendet werden.
cd %userprofile%\downloads
curl -O https://dlcdn.apache.org/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.zip
tar -xf apache-log4j-2.17.1-bin.zip
cd apache-log4j-2.17.1-bin
copy log4j-api-2.17.1.jar "%UserProfile%\Ubiquiti UniFi\lib"
copy log4j-core-2.17.1.jar "%UserProfile%\Ubiquiti UniFi\lib"
copy log4j-slf4j-impl-2.17.1.jar "%UserProfile%\Ubiquiti UniFi\lib"
cd "%UserProfile%\Ubiquiti UniFi\"
java -jar lib\ace.jar stopsvc
cd lib
ren log4j-api-2.13.3.jar log4j-api-2.13.3.old
ren log4j-core-2.13.3.jar log4j-core-2.13.3.old
ren log4j-slf4j-impl-2.13.3.jar log4j-slf4j-impl-2.13.3.old
mklink log4j-api-2.13.3.jar log4j-api-2.17.1.jar
mklink log4j-core-2.13.3.jar log4j-core-2.17.1.jar
mklink log4j-slf4j-impl-2.13.3.jar log4j-slf4j-impl-2.17.1.jar
cd ..
java -jar lib\ace.jar startsvc
Im Verzeichnis _unifi_root_/lib/ müssen die bestehenden 2.13.3-Dateien überschreiben werden, hierzu werden symbolischen Links erstellt, damit die 2.17.1-Dateien auf die original 2.13.3-Dateien zeigen, die bestehenden Dateien werden zuvor umbenannt. Nachdem die log4j-*jar-Dateien ersetzt wurden, kann der Unifi Controller wieder gestartet werden.
Hinweis: Apache Log4j 2-Updates werden kontinuierlich verfügbar, daher kann es zu einem fehlerhaften Download-Link kommen. Im Dateiindex hier ist die neuste Version zu finden, die Versionsnummer entsprechend ersetzen.
Apache Log4j Update für Linux
Um die Apache Log4j 2.17.1 Version für ein Unifi Controller auf Linux zu updaten, wird man in einem Terminal Shell zu root, und führt folgende Befehle aus.
$ systemctl stop unifi
# ohne systemd /etc/init.d/unifi stop
$ wget https://dlcdn.apache.org/logging/log4j/2.17.1/apache-log4j-2.17.1-bin.tar.gz
$ gunzip apache-log4j-2.17.1-bin.tar.gz
$ tar -xf apache-log4j-2.17.1-bin.tar
$ cd apache-log4j-2.17.1-bin
$ cp log4j-api-2.17.1.jar log4j-core-2.17.1.jar log4j-slf4j-impl-2.17.1.jar /usr/lib/unifi/lib
$ cd /usr/lib/unifi/lib
$ mv log4j-api-2.13.3.jar log4j-api-2.13.3.old
$ mv log4j-core-2.13.3.jar log4j-core-2.13.3.old
$ mv log4j-slf4j-impl-2.13.3.jar log4j-slf4j-impl-2.13.3.old
$ ln -s log4j-api-2.17.1.jar log4j-api-2.13.3.jar
$ ln -s log4j-core-2.17.1.jar log4j-core-2.13.3.jar
$ ln -s log4j-slf4j-impl-2.17.1.jar log4j-slf4j-impl-2.13.3.jar
$ systemctl start unifi
Im Verzeichnis /usr/lib/unifi/lib/ müssen die bestehenden 2.13.3-Dateien überschreiben werden, hierzu werden symbolischen Links erstellt, damit die neuen 2.17.1-Dateien auf die alten 2.13.3-Dateien zeigen, die 2.13.3-Dateien werden auf *.old umbenannt. Nachdem die log4j-*jar-Dateien auf diese weise ersetzt wurden, kann der Unifi Controller gestartet werden.