Connect to host unix sockets with the application's supplementary groups by copybara-service[bot] · Pull Request #16087 · google/gvisor · GitHub
Skip to content

Connect to host unix sockets with the application's supplementary groups - #16087

Open
copybara-service[bot] wants to merge 1 commit into
masterfrom
test/cl1003693544
Open

copybara-service[bot] wants to merge 1 commit into
masterfrom
test/cl1003693544

Conversation

@copybara-service

Copy link
Copy Markdown

Connect to host unix sockets with the application's supplementary groups

The gofer connects to a host unix socket on the application's behalf under its
effective uid and gid alone, so a socket the application may reach only through
a supplementary group, as docker.sock for the docker group, refuses the connect
where Linux accepts it.

Send the groups in a new ConnectWithGroups message and have the gofer apply them
with setgroups(2) on a thread it discards after the connect. The gofer's seccomp
filter now admits the call. A user namespace runsc creates for the gofer as root
now allows setgroups when host unix sockets are open and runsc's own namespace
allows it, since the namespace denies it by default and its ID mappings let the
gofer add no group it cannot already take with CAP_SETGID. A gofer without the
message keeps the ConnectWithCreds path.

The gofer also drops its own supplementary groups at startup when host unix
sockets are open and its user namespace allows setgroups, so an application
with none connects without that thread. A gofer not permitted to drop them
keeps them and does not offer the message.

Fixes #14807

FUTURE_COPYBARA_INTEGRATE_REVIEW=#14808 from dany74q:gofer-connect-groups 672ac14

The gofer connects to a host unix socket on the application's behalf under its
effective uid and gid alone, so a socket the application may reach only through
a supplementary group, as docker.sock for the docker group, refuses the connect
where Linux accepts it.

Send the groups in a new ConnectWithGroups message and have the gofer apply them
with setgroups(2) on a thread it discards after the connect. The gofer's seccomp
filter now admits the call. A user namespace runsc creates for the gofer as root
now allows setgroups when host unix sockets are open and runsc's own namespace
allows it, since the namespace denies it by default and its ID mappings let the
gofer add no group it cannot already take with CAP_SETGID. A gofer without the
message keeps the ConnectWithCreds path.

The gofer also drops its own supplementary groups at startup when host unix
sockets are open and its user namespace allows setgroups, so an application
with none connects without that thread. A gofer not permitted to drop them
keeps them and does not offer the message.

Fixes #14807

FUTURE_COPYBARA_INTEGRATE_REVIEW=#14808 from dany74q:gofer-connect-groups 672ac14
PiperOrigin-RevId: 1003693544
@copybara-service copybara-service Bot added the exported Issue was exported automatically label Oct 21, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

exported Issue was exported automatically

Projects

None yet

Development

Successfully merging this pull request may close these issues.

gofer connects to host unix sockets without the caller's supplementary groups

1 participant