mirror of
https://github.com/netblue30/firejail.git
synced 2026-05-15 14:16:14 -06:00
[GH-ISSUE #5883] Wayland security context support #3123
Labels
No labels
LTS merge
LTS merge
bug
bug
converted-to-discussion
doc-todo
documentation
duplicate
enhancement
file-transfer
firecfg
firejail-in-firejail
firetools
graphics
help wanted
information_old
installation
invalid
modif
moved
needinfo
networking
notabug
notourbug
old-version
overlayfs
packaging
profile-request
pull-request
question
question_old
removal
runtime-permissions
sandbox-ipc
security
stale
wiki
wiki
wontfix
wordpress
workaround
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: github-starred/firejail#3123
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @WhyNotHugo on GitHub (Jul 4, 2023).
Original GitHub issue: https://github.com/netblue30/firejail/issues/5883
Is your feature request related to a problem? Please describe.
security-context is a wayland protocol that can be used by clients to create a new wayland socket. The same compositor instance will listen for connections on this sockets, but clients that connect to it cannot perform privileged operations.
Describe the solution you'd like
Firejail should use this protocol to further sandbox clients and prevent them from screenscrapping, creating transparent fullscreen overlays and permanent keyboard hijacking, other attacks. All these attack rely on "priviledged" protocols and are unavailable on sockets created via
security-context.Describe alternatives you've considered
So far there hasn't been a way to do this. This protocol was introduced in wayland-protocols 1.32 which was released yesterday.
sway already has a patch with a working server implementations. I expect other wlroots compositors to follow suit.
Additional context
Shameless plug: I wrote a tiny cli client that creates a new socket at given path: https://git.sr.ht/~whynothugo/way-secure
This could be called on the host to create a socket inside the sandbox's
$XDG_RUNTIME_DIR.@emersion commented on GitHub (Jul 11, 2023):
FWIW, the Flatpak impl: https://github.com/flatpak/flatpak/pull/4920
@qwertviop commented on GitHub (Aug 1, 2024):
This protocol is already implemented by Kwin and sway.
I am interested in trying to implement this but before I start I would like to ask some general questions about how this should be implemented and configured.
By looking at how some mechanisms for x11 are implemented:
disable-x11.inc, which disallows access to various Xorg related files and unsets theDISPLAYandXAUTHORITYenvironmental variables. This can easily be done for Wayland too: create adisable-wayland.incthat disallows some IPC sockets in${RUNUSER}, unsetsWAYLAND_DISPLAYandWAYLAND_SOCKET, etc. This should probably be done regardless, asgrep -E '^blacklist.*wayland' ./profile-*/* | wc -lgives me the output 52, and I don't think it's reasonable that a profile that wants to disable wayland has to manually blacklist sockets.x11filter to enable x11 sandboxing, awaylandfilter could be used to only allow access to unprivileged protocols.HAVE_X11flag for compilation with or without x11 support. The same could be done to compile with or without wayland security context support.Do you have any preferences for this or other things I should keep in mind?
@qwertviop commented on GitHub (Aug 1, 2024):
One more point I thought of: much like the
@x11group including not just x11 files but also stuff related to GTK, Qt, vulkan, etc. there should probably be a group like@waylandthat includes those too. Or alternatively you separate the common graphics stack from x11 and have something like@gui.What are your thoughts on this @glitsj16 @kmk3 @rusty-snake ?
@ghost commented on GitHub (Aug 2, 2024):
This seems very doable indeed. I don't think there's anything special here besides implementing and editing the affected profiles and the profile template.
Personally I like this proposal.
Yes, I wouldn't expect anything unusual here. But @kmk3 is much better placed to advise on the particulars involved/potential implementation details to follow etcetera.
This is probably the trickier part of your proposal. I mean, there are pro's and con's here to consider for both suggestions and that's always very difficult to judge. No personal preference.
On the topic of
private-etcgroups I'll need a bit more time to go over the suggested@waylandor@guigroups. But I can see the importance/gains of adding/improving support for it.All in all a generous offer to work on this :-)
Regards
@rusty-snake commented on GitHub (Aug 2, 2024):
Consequences of fail is that we can not add it to any profile, hence "normal" users will not benefit from it, only power users who create .locals or add it to globals.local.
If we go with warning/info (I prefer) we can add it to profiles upstream as long as someone tested it with a supporting compositor and normal users can benefit.
For the most features we don't do a hard-fail if the platform requirements are not satisfied.
And the feature that have a hard-fail (
x11 none) had caused problems and ugly workarounds likedisable-X11.inc.Some features do hard-fail, but only when requested on command-line not when requested by a profile.
I do not like the include cluttering, we need snippets.
Nevermind, how about
wayland none: blacklist wayland socket and unset env (can be implemented with profile_add)wayland: use security contextwayland xxx: future extension possible@emersion commented on GitHub (Aug 2, 2024):
FWIW, Flatpak just carries on without the protocol if the compositor doesn't support it. Do note that Flatpak makes the difference between missing compositor support (global not advertised) and all other kind of errors when setting up the Wayland security context (these are hard failures).
@rusty-snake commented on GitHub (Aug 15, 2024):
Just FTR: GNOME/Mutter does not implement this because it is secure by default. The Wayland security context idea comes from the Kwin and sway edges where security is opt-in.
@emersion commented on GitHub (Aug 15, 2024):
Not exactly sure what this comment is about tbh. The security-context protocol allows authenticating clients, and GNOME also needs to do so. Support for the protocol is still WIP in mutter: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3107
@rusty-snake commented on GitHub (Aug 16, 2024):
Authentication alone is boring, you need to do something with it. Usually you will do authorisation.
In the context of wl-security-context everybody talks about screen capturing, which can then be deny/allow listed for some clients. However GNOME does not allow you to screen capture with third-party tools.
@WhyNotHugo commented on GitHub (Aug 16, 2024):
wl-security-contextisn't just about authentication. On sway (and likely other compositors too), clients in a security context don't have access to any privileged protocol by default.If firejail puts its sandboxed clients in a security context, they won't have access to any privileged protocols on compositors that expose them.
While screen capture is the typical example, the following are also considered privileged and not suitable for sandboxed clients:
Plus the following wlroots protocols:
@rusty-snake commented on GitHub (Aug 16, 2024):
is_privileged() ? deny : allowis authorisation.Non of the is implemented by mutter according to https://wayland.app/.
Going back to my comment above. Kwin/sway implement privileged protocols. Hence they need security contexts for sandboxed clients. Mutter does not implement privileged protocol, security contexts are less important.
@WhyNotHugo commented on GitHub (Aug 16, 2024):
Correct, it is.
A compositor could choose to do any of the above if they wanted to. I'm not sure if polkit is the right tool though; it is a system service configured by
root. It is usually used to authorise users to run system-wide privileged operations, not for sandboxes to run user-wide privileged operations.Nevertheless, no compositor does this (or has any plans to do this, AFAIK), so can we agree that it is out-of-scope here?
You make a good point here: the protocol specification itself doesn't state "compositors will restrict access to all privileged protocols". In reality, current implementation do restrict them.
There is currently no mechanism to allow a client to access some privileged protocols. AFAIK, there is an intent of implementing one such protocol, but there seems to be no consensus on what it will look like.
I think it's fair to say "almost every compositor except Mutter", rather than "Kwin/sway".
Mutter handles this out-of-band via D-Bus, so instead of having to sandbox the Wayland connection, you need to sandbox D-Bus instead. This is already implemented in firejail, so you don't need to worry about Mutter.
@emersion commented on GitHub (Aug 16, 2024):
Note that mutter implements e.g. the global keyboard shortcut inhibitor and this one is more privileged as well.
@qwertviop commented on GitHub (Aug 16, 2024):
I believe Weston and Kwin create a new socket with access to a subset of privileged protocols and pass them to an application using
$WAYLAND_SOCKET, as per the discussion here.This should also (optionally) be allowed here I think, maybe with something like
wayland socket? I'm not sure about the argument, but that can be hashed out later.@qwertviop commented on GitHub (Aug 18, 2024):
I didn't want to discuss the implementation details in an issue, so I've created a new draft here. Feel free to drop by.
@fira959 commented on GitHub (Oct 28, 2024):
Could someone explain the implications of not using this security-context to the casual reader coming across this issue please?
I used to be under the impression that X11 = bad for sandboxing because any process of the same user could access the x11 sockets and use it to read all other applications input. Is the same true for new sway implementations now, given the option for any normal client to use the screen capture feature of wayland? Does using any form of sandboxing on wayland/sway imply the same or similar issues as with X11?
@rusty-snake commented on GitHub (Oct 28, 2024):
Moved to #6522