You are here: SE » ThesesHome » ThesisLog4ShellStory

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)

  1. Welche SW-Eigenschaften betont die Selbstbeschreibung von log4j2 auf der Webseite? In der Dokumentation?
    Welche Eigenschaften sind als stillschweigend vorausgesetzt anzunehmen und warum?
  2. Wer nahm regelmäßig an der Entwicklung von log4j2 teil (Hintergrund, Motivation)?
  3. 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?
  4. Wie funktioniert speziell die Qualitätssicherung für neuen Code offiziell?
    Wie in der Praxis?
  5. 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?
  6. 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.)
  7. Wie ist die faktische Kultur des Projekts einzustufen? Z.B. im Hinblick auf:
    1. Neue Features als Bereicherung?
    2. Neue Features als mögliche Bedrohung der Qualität?
    3. Neue Features als Bedrohung der Verständlichkeit (für Benutzer_innen, aber auch für Mitentwickler_innen)?
    4. Konsolidierung ungünstiger Strukturen (z.B. technische Schulden, inkohärente Featuresets oder Terminologie)?
    5. …?
  8. 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?
  9. 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?
  10. 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

  1. 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.
  2. Dieses Material wird mit Open Coding konzeptualisiert (siehe z.B. Anleitungen zu Grounded Theory (insbesondere bzgl. Theoretical Sensitivity) von Strauß/Corbin, Charmaz oder Hoda).
  3. 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".
  4. 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.
  5. 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

Log4J

  1. Log4J1 End-of-Life Announcement + Diskussion

  2. Log4J2 Changelog & Release History

  3. 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

  4. 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


  5. Log4J Project Team

    Alle Aktuellen "Mitarbeiter" des Log4J2 Projektes

  6. Apache Logging Guidelines

    Guidelines zur Operation von Log4J

  7. Apache Log4J2 Project Guidelines

  8. Git Pull-Requests

Common Vulnerabilities and Exploits (CVEs)

  1. CVE-2021-44228
    https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228

  2. CVE-2021-45046
    https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45046

  3. CVE-2021-45105
    https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-45105

Artikel

  1. 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

  2. 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

  3. The Daily WTF

    Generelle Informationen zu Log4Shell

  4. B. Muskalla "Log4J2 The Ghost in the logging Framework"
    Frühe Anzeichen/Erstes Auftreten von Log4Shell

  5. 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

  6. 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?

  7. Dev.to
    "The Human Toll of log4j Maintenance"

  8. 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."

  9. 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

  10. 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