mirror of
https://github.com/netbirdio/netbird.git
synced 2026-10-25 22:09:08 +01:00
[client] Let an unprivileged caller log out a profile with no identity
The empty-key check sat behind requirePrivilegeForDeregistration, so an unprivileged logout of an identity-less profile was refused with PermissionDenied instead of completing as the no-op it is. And it was refused for most profiles, not a corner case: the gate arms whenever the SSH server is enabled, and sshServerEnabled reads an absent ServerSSHAllowed as enabled, so every legacy profile qualifies. The check now runs first. What the gate protects against is handing this machine's registered key to another management server; with no key there is nothing to hand over and nothing to protect. Reported by CodeRabbit and cubic-dev-ai on PR #7398, both on the same defect.
This commit is contained in:
@@ -377,4 +377,13 @@ func TestLogout_ProfileWithoutAnIdentityIsANoOp(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, s.sendLogoutRequestWithConfig(privilegedTestCtx(), stored),
|
||||
"logging out an identity-less profile must not fail")
|
||||
|
||||
// And for an unprivileged caller too: the deregistration privilege gate
|
||||
// guards the handover of a registered key, so with no key there is nothing
|
||||
// to guard. An unset SSH setting is what arms that gate — sshServerEnabled
|
||||
// reads an absent value as enabled — so this stands in for every legacy
|
||||
// profile, where behind the gate the caller would be refused.
|
||||
stored.ServerSSHAllowed = nil
|
||||
require.NoError(t, s.sendLogoutRequestWithConfig(userCtx(), stored),
|
||||
"an unprivileged caller could not log out a profile with nothing to deregister")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user