KDE-Desktop: RCE Schwachstelle durch .desktop Dateien

Wie die Hacker News heute morgen berichten, ist im KDE 4/5 Plasma Desktop eine Schwachstelle enthalten, die durch das reine Herunterladen von manipulierten Desktopdateien ( erkennbar an den Endungen .desktop und .directory)  ausgelöst werden kann.

Schwachstelle im KDE Desktop Indexer für Plasma

Die Ursache liegt im unsicheren Indexer, der neue Dateien analysiert und für die Suchfunktion des Desktops aufbereitet.

Dabei werden Umgebungsvariablen aus der analysierten Datei übernommen, was dazu führt, daß ein Angreifer seinen Schadcode ausführen kann. Auch das Auspacken von Archiven triggert den Indexer an, so daß auch dies die Schwachstelle auslöst.

Securityforscher Dominik Penner, der die Lücke direkt an die Hacker News geschickt hat, statt sie dem KDE Security Team zu senden, schreibt dazu:

„When a .desktop or .directory file is instantiated, it unsafely evaluates environment variables and shell expansions using KConfigPrivate::expandString() via the KConfigGroup::readEntry() function,“ Penner said.

„Wenn eine .desktop oder .directory Datei instanziiert wird ( A.d.R.: muß wohl gelesen heißen ), werden auf unsichere Weise Umgebungsvariablen und Shellerweiterungen ausgewertet, in dem die Funktion KConfigPrivate::expandString() via KConfigGroup::readEntry() genutzt wird“ schreibt Penner.

Diese Schwachstelle erinnert extrem stark an die kürzlich gefundenen Schwachstellen in Exim, wo auch die  Inhalte von fremdeingelieferten Strings ausgewertet werden und zu einem Root-Exploit eskalieren.

Bis auf weiteres muß man bei Downloads und dem Auspacken von aus unbekannten/unsicheren Quellen stammenden Archiven extrem vorsichtig sein. Das KDE Team hat einen Patch angekündigt, fertig ist der aber noch nicht.

Wenn ich mich recht entsinne, hatte der Gnome Index auch kürzlich erst so eine Schwachstelle.

Kleines Update: (10:24 Uhr)

Es gibt ein Youtube Video, daß das Problem zeigt. Allerdings wird man als unbedarft neugieriger erstmal unverständlich davor sitzen. Daher möchte ich dazu eine kleine Einleitung geben:

In dem Shellfenster rechts startet Penner „nc -lp 31337“  ( 31337 = „elite“ in L33T-Speak 🙂 ). nc startet also einen Dämon und wartet auf Verbindungen. Plötzlich wird nc beendet und wirft eine Fehlermeldung aus. Das liegt daran, daß das Desktopfile, daß per Firefox runtergeladen wird, sich bzw. ein dadurch gestartetes anderes Programm zu besagtem Port 31337 verbindet.

Das zusammen demonstriert das Problem. Man kann in den Desktopdateien natürlich auch „rm -rf /“ unterbringen, oder den Download von Illegalem Filmmaterial starten.

 

Wifiscanner App

Habt Ihr Euch mal gewünscht, daß Ihr mehr als nur die Liste mit verfügbaren WIFI Netzen sehen zu können ? Vielleicht auch, wo die liegen ? Also rein technisch, auf welchem Channel ? Na dann hätte ich da was für Euch:

Oh Ja, bei der Aufnahme was ganz schön was los 😀

Es dürfte offensichtlich sein, was man damit machen kann 😉 Weniger offensichtlich ist, wo man es her bekommt.

Versuchts mal hier:  https://github.com/Cyborgscode/wifiscanner

Wers gut findet kann ja mal einen Like auf Github da lassen.

Ach ja

das obligatorische Making-Of : 1 Tag GTK lernen, C hassen und Polkit verfluchend ( hat sich gelegt  😉 ) könnt Ihr ja selbst mal machen 😉

Mit was läuft Eure Desktopsession?

Wayland or Not-To-Wayland

Ich dachte bislang eigentlich, daß Wayland drin ist, wenn nicht X11 draufsteht. Aber wie erkennt man das eigentlich?

Indem man das hier eingibt :

[marius@eve ~]$ echo $WAYLAND_DISPLAY

Wie man sieht kommt da nichts. Wenn Wayland im Spiel wäre, müßte da laut Redhat’s AdminGuide für Fedora ( den gibts wirklich ) „wayland-0“ rauskommen.

Das verifizieren wir jetzt mal, in dem wir unsere Loginsession ansehen und befragen :

[marius@eve ~]$ loginctl
 SESSION UID USER   SEAT  TTY 
 c2       42 gdm    seat0 /dev/tty1 
 3      1000 marius seat0 /dev/tty2

2 sessions listed.

Ich habs mal aufgehübscht. Die 3 ist, was wir suchen, nämlich unsere SessionID. Mit der können wir das LoginControl lustige Sachen fragen:

[marius@eve ~]$ loginctl show-session 3 -p Type
Type=x11

Und das ist die Bestätigung, daß wir X11 fahren. Jetzt bin ich mal auf Redhats Antwort im Bugtracker gespannt, wie sie das erklären, wo doch Fedora auf Wayland umgestellt wurde und es im Sessionlogincontext auch EXTRA eine Auflistung der Desktopsessions gibt, die mit X11 laufen, was ja impliziert, daß die anderen es nicht tun ( so eine habe ich grade laufen).

Und so sieht die ganze Sessioninfo aus :

[marius@eve ~]$ loginctl show-session 3
Id=3
User=1000
Name=marius
Timestamp=Fri 2018-05-04 09:29:20 CEST
TimestampMonotonic=546595417
VTNr=2
Seat=seat0
TTY=/dev/tty2
Remote=no
Service=gdm-password
Scope=session-3.scope
Leader=7718
Audit=3
Type=x11
Class=user
Active=yes
State=active
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
LockedHint=no

Die interessanten habe ich eingedickt. Bis auf wenige Ausnahmen ( Sessionid ) dachte ich mir schon, daß ich ein User bin 😀

Wenn Cinnamon ständig crashed

Warum immer in der Weihnachtszeit ? Die sollte doch so friedlich sein. Mein Laptop war anderer Meinung. Vor zwei Wochen erst auf Fedora 26 aktualisiert und seit Mittwoch crasht Cinnamon in Endlosschleife in seinen Rückfallmodus, ohne irgendeine brauchbare Spur zu hinterlassen. Na gut, Challenge Accepted!

Die Versuchsreihe

Zunächst mal sollte man checken, ob man vielleicht ein neues Update bekommen hat und dies das Problem löst. Tat es nicht, weil keines kam.

Ok, jetzt müßte man doch mal nachsehen, was da unter der Haube los ist. Also „journalctl -xe | grep -i cinnamon“ eingegeben und … nichts.

Ok, versuchen wir es ohne den Filter : „journalctl -xe“ und siehe da, jede Menge rote Crashmeldungen in diversen Libs, aber leider kein Hinweis, was da der Auslöser sein könnte. Auch 1 Stunde später, und diverse andere Logs und Webseiten später, senkte sich vom Baum der Erkenntnis die rote Kartenfrucht herab.

Der Reinstall

Ein klares Signal, einen Reinstall durchzuführen, also als Root eingegeben:

dnf reinstall „cinnamon*“

Und wieder in Cinnamon einloggen… args.. gleiches Ergebnis. Hmm.. da hat es wohl noch mehr zerlegt… uff. Also, ‚ dnf reinstall „*“ ‚ eingegeben, also die ersten 80 Pakete bereits runter geladen waren, wollte ich aber doch noch mal etwas anderes austesten.

adduser -s /bin/bash testuser
passwd testuser

Und dann mal als Testuser einloggen. Oh… Das geht ja … Da ist dann wohl doch nur die Session defekt. Dann hauen wir die halt weg:

rm -rf ./.config/cinnamon-session ./.local/share/cinnamon ./.cinnamon

Danach ist der Account so jungfräulich, daß Cinnamon alles wieder sauber anlegt und oh Wunder, dann geht es auch wieder mit dem Login 😀

Man muß natürlich alles neu einstellen,aber das ist ein kleiner Preis. Was meine Session/Einstellungsdaten genau getroffen hatte, wird man wohl nie erfahren 😉