Die Geschichte hinter Log4Shell (B, M)
Hintergrund
Log4Shell (
CVE-2021-44228) ist die wahrscheinlich schwer wiegendste SW-Sicherheitslücke aller Zeiten, mit dem
höchsten möglichen Vulnerability Score (10.0). Sie erlaubt Angreifern, durch das Einfügen von JNDI-Lookup-URLs in irgendwelchen Eingabedaten, die geloggt werden, mit sehr geringem Aufwand, beliebigen Code auf einem betroffenen Server auszuführen und die Zahl betroffener Server ist ungeheuer groß.
Sie befindet sich schon seit 2013 in der Logging-Bibliothek
log4j2, die zu den populärsten Grundbausteinen für größere Java-Anwendungen gehört und wurde erst im November 2021 entdeckt. Es handelt sich nicht um einen subtilen Implementierungsfehler, sondern um eine verblüffend eklatante
Fehlkonzeption der Funktionalität.
Ziel
Bestmöglich verstehen und glaubhaft machen, wie diese Fehlleistung zustande gekommen ist.
Starthypothese: Gestalt und Rang des Konzepts
"Sicherheitslücke bei log4j2" im mentalen "Worauf es vor allem ankommt"-Modell der beteiligten Eintwickler_innen waren so, dass die Problematik zu wenig Aufmerksamkeit erhalten hat.
Forschungsfragen (ungeordnet)
- Welche SW-Eigenschaften betont die Selbstbeschreibung von log4j2 auf der Webseite? In der Dokumentation?
Welche Eigenschaften sind als stillschweigend vorausgesetzt anzunehmen und warum?
- Wer nahm regelmäßig an der Entwicklung von log4j2 teil (Hintergrund, Motivation)?
- An welchen Orten finden bei log4j Diskussionen zwischen den Entwickler_innen statt?
Was waren Gegenstand und Verlauf der Diskussion um die Einführung der JDNI-Lookups im Projekt?
Wie läuft die Einführung nichttrivialer neuer Features dort in der Regel ab?
- Wie funktioniert speziell die Qualitätssicherung für neuen Code offiziell?
Wie in der Praxis?
- Gibt es dabei Leute, die klar gründlicher arbeiten (und mehr echte Mängel entdecken) als andere?
Hat die Einfügung von Log4Shell in dieser Hinsicht einfach nur Pech gehabt?
- Wie steht es um die Konfigurierbarkeit der JNDI-Lookups?
Wie lief hierzu die Diskussion ab, insbes. bezüglich der Standardeinstellung?
Gibt es generell für die Standardeinstellungen bei log4j2 einen klaren Stil?
(Der(?) Hauptentwickler von log4j1 hat sich auf Twitter von log4j2 distanziert. Er ist offenbar wegen Meinungsverschiedenheiten am Beginn von log4j2 ausgestiegen und hat was Eigenes gemacht? Leider kann ich den Tweet nicht wiederfinden.)
- Wie ist die faktische Kultur des Projekts einzustufen? Z.B. im Hinblick auf:
- Neue Features als Bereicherung?
- Neue Features als mögliche Bedrohung der Qualität?
- Neue Features als Bedrohung der Verständlichkeit (für Benutzer_innen, aber auch für Mitentwickler_innen)?
- Konsolidierung ungünstiger Strukturen (z.B. technische Schulden, inkohärente Featuresets oder Terminologie)?
- …?
- Wie sah die Diskussion nach Entdeckung der Lücke aus?
Ging es nur um die Reparatur oder auch um eine Urgrund-Analyse (root cause analysis)?
Wurden daraus Schlüsse für die Zukunft gezogen, die nichts mit dem JNDI-Lookup zu tun haben?
- In einem Vortrag auf der Black Hat 2016 wurden JNDI-Lookups als Kategorie von Schwachstellen bereits vorgestellt.
Hat diese Information ein Mitglied es log4j2-Projektes erreicht?
Falls ja: Was geschah dann? Falls nein: Warum nicht? Wer hätte dafür sorgen können? Sorgen sollen?
- War den Autoren hinreichend bewusst, dass Lookups nicht nur in der Config funktionieren, sondern auch für Logevents?
(Falls nicht, hier bitte eine Urgrundanalyse machen und mehrere Stufen von "Warum?"-Fragen verfolgen.)
Methoden
- Die Untersuchung sucht nach Textmaterial, das die Angelegenheit beleuchtet -- und zwar allerorten: Projekt-Webseiten, Blogs, Issue-Tracker, Mailinglisten, Aussagen in Interviews (wie z.B. hier bei Bloomberg), Git-Repo etc. pp.
- Dieses Material wird mit Open Coding konzeptualisiert (siehe z.B. Anleitungen zu Grounded Theory (insbesondere bzgl. Theoretical Sensitivity) von Strauß/Corbin, Charmaz oder Hoda).
- Soweit es sich um Diskussionen handelt, werden die Basiskonzepte von Salinger benutzt, um den Diskussionsverlauf zu verstehen, insbesondere, welche Beiträge in der Diskussion ohne abschließende Betrachtung "versacken".
- Eine wertvolle theoretische Brille (theoretical lens) ist das Konzept von Kultur in der Kurzformulierung von Shweder und Beldo: "[...] ‘culture’ refers to community-specific ideas about what is true, good, beautiful, and efficient."
Wenn wir in der Analyse herausarbeiten können, was in der Log4j2-Projektgemeinde als true, good, beautiful oder efficient angesehen wird (und was im Umkehrschluss eben nicht oder jedenfalls klar weniger), sind wir der Antwort wahrscheinlich recht nah.
- In der schriftlichen Ausarbeitung sind so viel es sinnvoll geht gefundene Quellen mit URLs zu bezeichnen und wichtige Inhalte als wörtliches Zitat (ggf. verkürzt) wiederzugeben.
- …
Schwierigkeitsgrad
Diese Arbeit verlangt ideenreiches und aufmerksames Recherchieren, Konzeptualisierung dessen, was man bei der Recherche findet und eine sorgfältige wissenschaftliche Dokumentation des Vorgehens und der gefundenen Quellen.
Der schwierigiste Aspekt ist das Konzeptualisieren ("Sensemaking"), für das man ein gutes Gefühl (Theoretical Sensitivity) dafür braucht, was an einer Sache der bedeutsame Aspekt ist und wie Dinge zusammenhängen. Prof. Prechelt kann dabei unterstützen und Rückmeldung geben, aber ohne gute eigene Ideen wird das Ergebnis hausbacken bleiben.
Quellenverzeichnis
- Log4J1 End-of-Life Announcement + Diskussion
- Log4J2 Changelog & Release History
- Mailing Lists
Diese Mailing-Listen umfassen sowohl die Entwickler- und Nutzeremails des Log4J Projektes
Übersichtsseite aller Mailing Lists:
https://logging.apache.org/log4j/2.x/mail-lists.html
Aktuelle User Mailing List Log4JUser:
https://lists.apache.org/list.html?log4j-user@logging.apache.org
Informationen zur Verminderung der Reichweite von Log4Shell
https://lists.apache.org/thread/3m03bn0624dftbvg5wg5f28hn2qd0ry2
Log4J2 2.15.0 Release Announcement -- Sollte CVE-2021-44228 beheben
https://lists.apache.org/thread/gzj2jsglvsffzs8zormxyly0vofdxp6j
Aktuelle Mailing List Log4Jdev (2017 - )
https://lists.apache.org/list.html?dev@logging.apache.org
Email-Thread Diskussion über das Entfernen von JNDI Lookups
https://lists.apache.org/thread/gjw7g957kxdt454rkxzkqxbkp0sdnsrc
Legacy Mailing List Log4JDev (2000-2017):
https://lists.apache.org/list?log4j-dev@logging.apache.org
- Jira Issues
Dies sind die Jira Issues zur Behebung von Log4Shell
Disable JNDI by default
https://issues.apache.org/jira/browse/LOG4J2-3208
Limit the protocols JNDI can use and restrict LDAP.
https://issues.apache.org/jira/browse/LOG4J2-3201
Message lookups should be disabled by default
https://issues.apache.org/jira/browse/LOG4J2-3198
- Log4J Project Team
Alle Aktuellen "Mitarbeiter" des Log4J2 Projektes
- Apache Logging Guidelines
Guidelines zur Operation von Log4J
- Apache Log4J2 Project Guidelines
- Git Pull-Requests
- Preloaded lookup Diskussion Aug 2020
- Limit JNDI to the java protocol only
- Remove JndiLookup class and all related tests to prevent potential security issue
- Completely disable JNDI in Interpolator.java, in the hope to patch CVE-2021-44228
- 2.12.1.sec1:Vulnerability fixed - based on 2.12.1 and supported Java7
- Fix environment variable for formatMsgNoLookups
- Log4j2 no longer formats lookups in messages by default
- Restrict LDAP access via JNDI
- Tsunami Security Scanner to detect Log4Shell
Common Vulnerabilities and Exploits (CVEs)
- CVE-2021-44228
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228
- CVE-2021-45046
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046
- CVE-2021-45105
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105
Artikel
- LunaSec
Was ist der Exploit, wie funktioniert er, wie kann ich ihn verhindern?
https://www.lunasec.io/docs/blog/log4j-zero-day/
Kontext, Bedingungen für Exploits, testen der Vorherigen Mitigation
https://www.lunasec.io/docs/blog/log4j-zero-day-update-on-cve-2021-45046/
Mitigation Guide
-
Heise
Generelle Inforationen zu Log4Shell
https://www.heise.de/hintergrund/Log4Shell-Eine-Bestandsaufnahme-6342536.html
Log4J "Funktioniert wie spezifiziert", Software Bloat, Wie konnte Log4Shell entstehen
https://www.heise.de/meinung/Kommentar-zu-log4j-Es-funktioniert-wie-spezifiziert-6294476.html
-
The Daily WTF
Generelle Informationen zu Log4Shell
-
B. Muskalla "Log4J2 The Ghost in the logging Framework"
Frühe Anzeichen/Erstes Auftreten von Log4Shell
-
WhiteSource
Einführung zu CVE-2021-45046
https://www.whitesourcesoftware.com/resources/blog/log4j-vulnerability-cve-2021-45046/
CVE Ranking für CVE2021-45046
https://www.whitesourcesoftware.com/vulnerability-database/CVE-2021-45046?query=45105
-
Snyk.io
Sicherheitsüberlegungen zu CVEs, "Nicht alle Systeme, für die man Privilegierten Zugriff auf config files hat sind CVEs"
Security in context: When is a CVE not a CVE?
-
Dev.to
"The Human Toll of log4j Maintenance"
-
Neue Zürcher Zeitung
Ceki Gülcü über die Entwicklung von Log4j 1
- https://www.nzz.ch/technologie/log4j-wurde-1997-in-der-schweiz-entwickelt-der-erfinder-erzaehlt-ld.1660571
- Dreiviertelmehrheit für changes, aus unterschiedlichen Firmen
- "Bei mir und ihm [Ralph Goers, einer der Main commiter log4j2] gerieten zwei Weltanschauungen aneinander,
er hat eine liberalere Einstellung zum Einbauen neuer Funktionen, ich bin ziemlich konservativ. 95 Prozent
der Änderungsvorschläge lehne ich ab. Das ist für andere frustrierend. Deshalb machte Ralph Goers dann
auch sein eigenes Ding und veröffentlichte um 2012 Log4j 2 auf Apache."
-
Black Hat
Black Hat Briefing on JNDI-LDAP Lookup Security 2016
https://www.blackhat.com/us-16/briefings.html#a-journey-from-jndi-ldap-manipulation-to-remote-code-execution-dream-land
https://www.blackhat.com/docs/us-16/materials/us-16-Munoz-A-Journey-From-JNDI-LDAP-Manipulation-To-RCE.pdf
-
Security Insider
Analyse von Log4Shell- Angriffen
https://www.security-insider.de/analyse-von-log4shell-angriffen-a-1093063/
Grundlagen für die IT-Sicherheit
Bundesamt für Sicherheit in der Informationstechnik (BSI)BSI IT Grundschutzhandbuch
- https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Kompendium/IT_Grundschutz_Kompendium_Edition2022.pdf
- SYS.1.1.A37 Kapselung von sicherheitskritischen Anwendungen und Betriebssystemkomponenten
National Institute for Standards and Technology
Guide to General Server Security: NIST Special Publication 800-123, July 2008
- https://nvlpubs.nist.gov/nistpubs/legacy/sp/nistspecialpublication800-123.pdf