Wie funktioniert die Lücke im Java-Zusammenhang?

Der eigentliche Sinn des Lookups ist es, Daten abzufragen, um im Logfile für eine bessere Lesbarkeit zu sorgen. Zum Beispiel kann so bei einem LDAP-Server angefragt werden, wie der Klarname zu dem Usernamen lautet, der gerade einen Login versucht hat.

Stellenmarkt
  1. Junior Produkt Manager Digital Business (m/w/d)
    MEDIENGRUPPE KLAMBT, Hamburg (Home-Office möglich)
  2. Senior Softwareentwickler (m/w/d) in der Anwendungsentwicklung
    Allianz Technology SE, Unterföhring
Detailsuche

Weil aber so eine Log-Message von Log4J 2 nicht nur aus Strings, sondern auch aus Objekten besteht und so ein über JNDI abgefragter Wert ein komplexes Objekt sein kann, gibt es die Möglichkeit, dass die Antwort des JNDI-Lookup-Aufrufs ein serialisiertes Java-Objekt enthält. Dazu gehört dann zum Beispiel der Klassenname und die serialisierten Daten.

Findet sich eine Klasse mit dem vorgegebenen Namen im Class-Path auf dem Server, wird ein Objekt dieser Klasse mit den serialisierten Daten instanziiert - der Server hat dann zum Beispiel ein komplett befülltes Objekt der Klasse UserData mit Name, Vorname, Adresse und allen weiteren Daten. Ist die geforderte Klasse aber nicht im eigenen Class-Path vorhanden, können die gegebenenfalls in der JNDI-Lookup-Antwort enthaltenen Informationen verwendet werden, die angeben, in welchen fremden Code-Repository die Klasse zu finden ist. Diese .class-Datei wird dann geladen und an den ClassLoader übergeben, sodass daraus Instanzen instanziiert und befüllt werden können.

Dass dies ein Problem sein kann, ist schon lange bekannt. Oracle hat deshalb in Java 8 vor Jahren eine Systemvariable eingeführt, mit der das Laden von Klassen aus einem Remote-Repository unterbunden werden kann. Allerdings war diese für die ersten Jahre standardmäßig ausgeschaltet, um zu verhindern, dass Programmcode, der sich auf so etwas verlässt, durch ein Update von Java 8 nicht mehr funktioniert.

Hacking & Security: Das umfassende Handbuch. 2. aktualisierte Auflage des IT-Standardwerks (Deutsch) Gebundene Ausgabe
Golem Akademie
  1. Entwicklung mit Unity auf der Microsoft HoloLens 2 Plattform: virtueller Zwei-Tage-Workshop
    7.–8. Februar 2022, Virtuell
  2. Microsoft Dynamics 365 Guides mit HoloLens 2: virtueller Ein-Tages-Workshop
    16. Februar 2022, Virtuell
Weitere IT-Trainings

Das Problem aber ist, dass es dieses Remote-Laden von .class-Dateien gar nicht wirklich braucht. Denn auch ohne dieses Laden von Klassen können Angreifer eine große Menge von bereits vorhandenen Klassen benutzen, indem sie entsprechende Informationen zur Deserialisierung bereithalten. So kann über Umwege zum Beispiel eine als String übergebene .class-Datei irgendwo in den lokalen Class-Path auf dem Server geschrieben werden.

Befindet sich so eine Datei erst mal im Class-Path, wird sie bei jedem Neustart der Applikation auch wieder vom Classloader geladen; das große Problem dabei ist, dass eine Java-Klasse statische Code-Blöcke erlaubt. Diese statischen Code-Blöcke werden bereits beim Laden der Klasse in den Classloader ausgeführt und nicht erst, wenn ein Objekt dieses Typs instanziiert wird oder ein Methodenaufruf darauf stattfindet.

Durch diesen Mechanismus muss sich im eigentlichen Programmcode des infizierten Systems auch keinerlei Referenz auf die Klasse befinden, damit sie ihre Arbeit verrichtet. Und diese Arbeit kann alles sein, was dem lokalem Java-Programm auf dem Server möglich ist, inklusive Syscalls, die irgendwelche Programme ausführen, bis hin zum Aufbauen einer versteckten Webseite, die über einen Browser eine Shell zur Verfügung stellt.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Log4J-Lücke: Warum Log4Shell so gefährlich ist und was (nicht) hilftWas ist betroffen? Und was hilft gegen Log4Shell? 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6.  


Bolzkopf 02. Jan 2022 / Themenstart

denn in diesen Containern befinden sich oftmals eigene Kopien der Java-Bibiliotheken. Es...

scrumdideldu 23. Dez 2021 / Themenstart

Der letzte Teil stimmt. Es entbindet nicht von jeglicher Verantwortung. Allerdings ist...

gadthrawn 21. Dez 2021 / Themenstart

Die Beispiele bei denen OS wiederholt unsicher ist benötigt es nur aus einem Grund: Zu...

gadthrawn 21. Dez 2021 / Themenstart

Nicht? Weißt du was bei einem String mit% beim loggen passiert in Python? ...

gadthrawn 18. Dez 2021 / Themenstart

Für dich nicht, für andere schon, sonst wäre das nie ein Feature Request gewesen. Es...

Kommentieren



Aktuell auf der Startseite von Golem.de
Corona-Warn-App
Jede geteilte Warnung kostete 100 Euro

Die Bundesregierung hat für die Corona-Warn-App bisher mehr als 130 Millionen Euro ausgegeben. Derzeit gibt es besonders viele rote Warnungen.

Corona-Warn-App: Jede geteilte Warnung kostete 100 Euro
Artikel
  1. Activision Blizzard: Was passiert mit Call of Duty, Diablo und Xbox Game Pass?
    Activision Blizzard
    Was passiert mit Call of Duty, Diablo und Xbox Game Pass?

    Playstation als Verlierer und Exklusivspiele für den Xbox Game Pass: Golem.de über die bislang größte Übernahme durch Microsoft.
    Eine Analyse von Peter Steinlechner

  2. Dice: Update-Roadmap für Battlefield 2042 vorgestellt
    Dice
    Update-Roadmap für Battlefield 2042 vorgestellt

    Ob das reicht? Das Entwicklerstudio Dice hat seine Pläne für Battlefield 2042 vorgestellt. Der Shooter hat extrem niedrige Spielerzahlen.

  3. Energiespeicher: Große Druckluftspeicher locken Investorengelder an
    Energiespeicher
    Große Druckluftspeicher locken Investorengelder an

    Hydrostor bietet eine langlebige Alternative zu Netzspeichern aus Akkus, die zumindest in den 2020er Jahren wirtschaftlich ist.
    Von Frank Wunderlich-Pfeiffer

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • LG OLED 55" 120Hz 999€ • MindStar (u.a. NZXT WaKü 129€, GTX 1660 499€) • Seagate Firecuda 530 1TB inkl. Kühlkörper + 20€ PSN-Guthaben 189,90€ • HP Omen Gaming-Stuhl 319€ • Sony Pulse 3D Wireless PS5 Headset 79,99€ • Huawei MateBook 16,1" 16GB 512GB SSD 709€ [Werbung]
    •  /