See how sddm project compares to other vendors in security performance
An issue was discovered in SDDM before 0.19.0. It incorrectly starts the X server in a way that - for a short time period - allows local unprivileged users to create a connection to the X server without providing proper authentication. A local attacker can thus access X server display contents and, for example, intercept keystrokes or access the clipboard. This is caused by a race condition during Xauthority file creation.
An issue was discovered in SDDM through 0.17.0. If configured with ReuseSession=true, the password is not checked for users with an already existing session. Any user with access to the system D-Bus can therefore unlock any graphical session. This is related to daemon/Display.cpp and helper/backend/PamBackend.cpp.
daemon/Greeter.cpp in sddm before 0.13.0 does not properly disable the KDE crash handler, which allows local users to gain privileges by crashing a greeter when using certain themes, as demonstrated by the plasma-workspace breeze theme.
It was reported that sddm has several issues leading to local privilege escalation:
[1]
The xauth cookie handling code calls xauth binary via popen() as root, which in turn dumps and creates files as root in users ~.
[2]
After xauth has done its job, sddm chowns() the ~/.Xauthority file to user. This is a race and a local root exploit.
[3]
The .xsession-errors file is created in ~ but as root. This allows to destroy arbitrary system files.
Upstream patch is at [4].
[1] https://bugzilla.suse.com/showbug.cgi?id=897788#c7 [2] https://bugzilla.suse.com/showbug.cgi?id=897788#c8 [3] https://bugzilla.suse.com/showbug.cgi?id=897788#c9 [4] https://github.com/sddm/sddm/pull/280
It was reported that it's possible to login as "sddm" user without authentication:
This is since if sddm detects that user in the PamBackend, it has:
if (user == "sddm") service = "sddm-greeter"; else if (mapp->session()->path().isEmpty()) service = "sddm-check"; else if (mautologin) service = "sddm-autologin"; result = mpam->start(service, user);
and the sddm-greeter PAM config basically just has a pampermit. More info is available at [1]. Upstream patch is at [2].
[1]: https://bugzilla.suse.com/showbug.cgi?id=897788#c6 [2]: https://github.com/sddm/sddm/pull/279