Browse Source

restrict certificate type for builtin SSH server (#26789)

- While doing some sanity checks over OpenSSH's code for how they handle
certificates authentication. I stumbled on an condition that checks the
certificate type is really an user certificate on the server-side
authentication. This checks seems to be a formality and just for the
sake of good domain seperation, because an user and host certificate
don't differ in their generation, verification or flags that can be
included.
- Add this check to the builtin SSH server to stay close to the
unwritten SSH specification.
- This is an breaking change for setups where the builtin SSH server is
being used and for some reason host certificates were being used for
authentication.
- 
(cherry picked from commit de35b141b7)

Refs: https://codeberg.org/forgejo/forgejo/pulls/1172

## :warning: BREAKING :warning:

Like OpenSSH, the built-in SSH server will now only accept SSH user
certificates, not server certificates.

Co-authored-by: Gusted <postmaster@gusted.xyz>
Co-authored-by: Giteabot <teabot@gitea.io>
tags/v1.21.0-rc0
Earl Warren 9 months ago
parent
commit
4ab8e56c91
No account linked to committer's email address
1 changed files with 6 additions and 0 deletions
  1. 6
    0
      modules/ssh/ssh.go

+ 6
- 0
modules/ssh/ssh.go View File

@@ -191,6 +191,12 @@ func publicKeyHandler(ctx ssh.Context, key ssh.PublicKey) bool {
return false
}

if cert.CertType != gossh.UserCert {
log.Warn("Certificate Rejected: Not a user certificate")
log.Warn("Failed authentication attempt from %s", ctx.RemoteAddr())
return false
}

// look for the exact principal
principalLoop:
for _, principal := range cert.ValidPrincipals {

Loading…
Cancel
Save