diff options
author | Jakub Jelen <jjelen@redhat.com> | 2018-11-26 18:02:22 +0100 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2018-11-30 18:57:39 +0100 |
commit | 455d495c7441370332835b9123806f3bdccac053 (patch) | |
tree | f201a705f6659951e8cd00892516efda326c26cb | |
parent | b1bae1d90f61bd7842a18bda4f9ac9c3de3d82fe (diff) | |
download | libssh-455d495c7441370332835b9123806f3bdccac053.tar.gz libssh-455d495c7441370332835b9123806f3bdccac053.tar.xz libssh-455d495c7441370332835b9123806f3bdccac053.zip |
pki: Sanitize input to verification
Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
(cherry picked from commit b72c9eead6c40c8710af2913faedde3c5eb4384e)
-rw-r--r-- | src/pki_crypto.c | 10 | ||||
-rw-r--r-- | src/pki_gcrypt.c | 8 | ||||
-rw-r--r-- | src/pki_mbedcrypto.c | 8 |
3 files changed, 25 insertions, 1 deletions
diff --git a/src/pki_crypto.c b/src/pki_crypto.c index 05128058..e79d97b4 100644 --- a/src/pki_crypto.c +++ b/src/pki_crypto.c @@ -1796,7 +1796,15 @@ int pki_signature_verify(ssh_session session, int rc; int nid; - switch(key->type) { + if (key->type != sig->type) { + SSH_LOG(SSH_LOG_WARN, + "Can not verify %s signature with %s key", + sig->type_c, + key->type_c); + return SSH_ERROR; + } + + switch (key->type) { case SSH_KEYTYPE_DSS: rc = DSA_do_verify(hash, hlen, diff --git a/src/pki_gcrypt.c b/src/pki_gcrypt.c index 5506edfb..c0cf5926 100644 --- a/src/pki_gcrypt.c +++ b/src/pki_gcrypt.c @@ -2034,6 +2034,14 @@ int pki_signature_verify(ssh_session session, gcry_sexp_t sexp; gcry_error_t err; + if (key->type != sig->type) { + SSH_LOG(SSH_LOG_WARN, + "Can not verify %s signature with %s key", + sig->type_c, + key->type_c); + return SSH_ERROR; + } + switch(key->type) { case SSH_KEYTYPE_DSS: /* That is to mark the number as positive */ diff --git a/src/pki_mbedcrypto.c b/src/pki_mbedcrypto.c index ee791db0..ccce014c 100644 --- a/src/pki_mbedcrypto.c +++ b/src/pki_mbedcrypto.c @@ -1008,6 +1008,14 @@ int pki_signature_verify(ssh_session session, const ssh_signature sig, const int rc; mbedtls_md_type_t md = 0; + if (key->type != sig->type) { + SSH_LOG(SSH_LOG_WARN, + "Can not verify %s signature with %s key", + sig->type_c, + key->type_c); + return SSH_ERROR; + } + switch (key->type) { case SSH_KEYTYPE_RSA: switch (sig->hash_type) { |