Skip to content

Commit f2f61f2

Browse files
committed
Ensure users do not accidentally set the PK extension
1 parent 80d8371 commit f2f61f2

File tree

1 file changed

+20
-2
lines changed

1 file changed

+20
-2
lines changed

server.go

+20-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,14 @@ var DefaultChannelHandlers = map[string]ChannelHandler{
3232

3333
var permissionsPublicKeyExt = "gliderlabs/ssh.PublicKey"
3434

35+
func ensureNoPKInPermissions(ctx Context) error {
36+
if _, ok := ctx.Permissions().Permissions.Extensions[permissionsPublicKeyExt]; ok {
37+
return errors.New("misconfigured server: public key incorrectly set")
38+
}
39+
40+
return nil
41+
}
42+
3543
// Server defines parameters for running an SSH server. The zero value for
3644
// Server is a valid configuration. When both PasswordHandler and
3745
// PublicKeyHandler are nil, no client authentication is performed.
@@ -152,7 +160,12 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
152160
config.PasswordCallback = func(conn gossh.ConnMetadata, password []byte) (*gossh.Permissions, error) {
153161
resetPermissions(ctx)
154162
applyConnMetadata(ctx, conn)
155-
if ok := srv.PasswordHandler(ctx, string(password)); !ok {
163+
err := ensureNoPKInPermissions(ctx)
164+
if err != nil {
165+
return ctx.Permissions().Permissions, err
166+
}
167+
ok := srv.PasswordHandler(ctx, string(password))
168+
if !ok {
156169
return ctx.Permissions().Permissions, fmt.Errorf("permission denied")
157170
}
158171
return ctx.Permissions().Permissions, nil
@@ -162,7 +175,12 @@ func (srv *Server) config(ctx Context) *gossh.ServerConfig {
162175
config.PublicKeyCallback = func(conn gossh.ConnMetadata, key gossh.PublicKey) (*gossh.Permissions, error) {
163176
resetPermissions(ctx)
164177
applyConnMetadata(ctx, conn)
165-
if ok := srv.PublicKeyHandler(ctx, key); !ok {
178+
err := ensureNoPKInPermissions(ctx)
179+
if err != nil {
180+
return ctx.Permissions().Permissions, err
181+
}
182+
ok := srv.PublicKeyHandler(ctx, key)
183+
if !ok {
166184
return ctx.Permissions().Permissions, fmt.Errorf("permission denied")
167185
}
168186

0 commit comments

Comments
 (0)