[Pkg-utopia-maintainers] Bug#903563: polkit: CVE-2018-1116: polkitd trusting client-supplied UID allows spoofed authentication dialogs
Simon McVittie
smcv at debian.org
Wed Jul 11 12:09:28 BST 2018
Package: policykit-1
Version: 0.105-3+nmu1
Severity: important
Tags: security pending
X-Debbugs-Cc: security at debian.org
Security team: Do you want to do a DSA for this, or should this just be a
stable-update?
I've uploaded policykit-1/0.105-21 with a backport of the patch, but I'd
appreciate a check from other developers on whether I have backported it
correctly. I also have 0.115-1 ready for upload to experimental when I've
tested it.
I will have limited availability this/next week, so I would appreciate it
if someone else could prepare and test whatever security or stable updates
are felt to be appropriate.
Thanks,
smcv
On Wed, 11 Jul 2018 at 10:21:56 +0200, Matthias Gerstner wrote:
> during a code reviewing related to polkit
> <https://www.freedesktop.org/wiki/Software/polkit/> I found a spoofed
> authentication vulnerability in the implementation of the polkitd
> daemon. It allows a local attacker to trigger authentication dialogs for
> other users' processes. This way the attacker can obtain certain
> information about the polkit rules configuration of other users, confuse
> other users or DoS other users by infinitely triggering authentication
> dialogs.
>
> Basically the issue is that an attacker is able to specify
> arbitrary target process UIDs when talking to polkitd via D-Bus like
> this:
>
> $ gdbus call --system --dest org.freedesktop.PolicyKit1 \
> --object-path /org/freedesktop/PolicyKit1/Authority \
> --method org.freedesktop.PolicyKit1.Authority.CheckAuthorization \
> '("unix-process", {"pid": <uint32 ${PID}>, "start-time": <uint64 0>, "uid": <${UID}>})' \
> org.freedesktop.timedate1.set-time '[]' 1 ''
>
> Where ${PID} needs to be the process ID of the target process and ${UID}
> the user ID of the calling process i.e. `id -u`.
>
> Upstream just released version 0.115 of polkit that addresses this issue
> by way of commit bc7ffad53643a9c80231fc41f5582d6a8931c32c. The issue was
> introduced with a fix for CVE-2013-4288 in polkit version 0.112.
>
> Further below you can find the upstream commit message with a more
> detailed explanation of the issue and its fix. I want to thank the
> upstream developers for the constructive communication and quick
> handling of the issue.
>
> Best regards
>
> Matthias
>
> Timeline:
>
> 2018-06-21: I discovered and analyzed the issue
> 2018-06-22: I reported the issue privately to upstream via
> dbus-security at lists.freedesktop.org. In the following days upstream
> devised a patch that was discussed and reviewed on the mailing list.
> Publication has been scheduled for 2018-07-10 together with the
> release of the fixed polkit version.
> 2018-07-10: The upstream release was published as scheduled.
>
> References:
>
> - Upstream Release Notice: https://lists.freedesktop.org/archives/polkit-devel/2018-July/000583.html
> - Upstream Fix: https://cgit.freedesktop.org/polkit/commit/?id=bc7ffad53643a9c80231fc41f5582d6a8931c32c
> - SUSE Bug for the issue: https://bugzilla.suse.com/show_bug.cgi?id=1099031
>
> Upstream Commit Message:
>
> Fix CVE-2018-1116: Trusting client-supplied UID
>
> As part of CVE-2013-4288, the D-Bus clients were allowed (and
> encouraged) to submit the UID of the subject of authorization checks
> to avoid races against UID changes (notably using executables
> set-UID to root).
>
> However, that also allowed any client to submit an arbitrary UID, and
> that could be used to bypass "can only ask about / affect the same UID"
> checks in CheckAuthorization / RegisterAuthenticationAgent /
> UnregisterAuthenticationAgent. This allowed an attacker:
>
> - With CheckAuthorization, to cause the registered authentication
> agent in victim's session to pop up a dialog, or to determine whether
> the victim currently has a temporary authorization to perform an
> operation.
>
> (In principle, the attacker can also determine whether JavaScript
> rules allow the victim process to perform an operation; however,
> usually rules base their decisions on information determined from
> the supplied UID, so the attacker usually won't learn anything new.)
>
> - With RegisterAuthenticationAgent, to prevent the victim's
> authentication agent to work (for a specific victim process),
> or to learn about which operations requiring authorization
> the victim is attempting.
>
> To fix this, expose internal _polkit_unix_process_get_owner() /
> obsolete polkit_unix_process_get_owner() as a private
> polkit_unix_process_get_racy_uid__() (being more explicit about the
> dangers on relying on it), and use it in
> polkit_backend_session_monitor_get_user_for_subject() to return
> a boolean indicating whether the subject UID may be caller-chosen.
>
> Then, in the permission checks that require the subject to be
> equal to the caller, fail on caller-chosen UIDs (and continue
> through the pre-existing code paths which allow root, or root-designated
> server processes, to ask about arbitrary subjects.)
>
> Signed-off-by: Miloslav Trmač <mitr at redhat.com>
More information about the Pkg-utopia-maintainers
mailing list