mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-01-27 02:02:26 +00:00
Add BUG_SSH2_DERIVEKEY, present (according to OpenSSH) in ssh.com
versions 2.0.*, and causing the shared secret not to be included in key derivation hashes. (This doesn't quite cause a blatant security hole because the session ID - _derived_ from the shared secret - is still included.) [originally from svn r1853]
This commit is contained in:
parent
67cb02d03d
commit
c24016e0da
13
ssh.c
13
ssh.c
@ -182,6 +182,7 @@ static const char *const ssh2_disconnect_reasons[] = {
|
|||||||
#define BUG_NEEDS_SSH1_PLAIN_PASSWORD 4
|
#define BUG_NEEDS_SSH1_PLAIN_PASSWORD 4
|
||||||
#define BUG_CHOKES_ON_RSA 8
|
#define BUG_CHOKES_ON_RSA 8
|
||||||
#define BUG_SSH2_RSA_PADDING 16
|
#define BUG_SSH2_RSA_PADDING 16
|
||||||
|
#define BUG_SSH2_DERIVEKEY 32
|
||||||
|
|
||||||
static int ssh_pkt_ctx = 0;
|
static int ssh_pkt_ctx = 0;
|
||||||
|
|
||||||
@ -1701,6 +1702,16 @@ static void ssh_detect_bugs(char *vstring)
|
|||||||
logevent("We believe remote version has SSH2 HMAC bug");
|
logevent("We believe remote version has SSH2 HMAC bug");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strncmp(imp, "2.0.", 4)) {
|
||||||
|
/*
|
||||||
|
* These versions have the key-derivation bug (failing to
|
||||||
|
* include the literal shared secret in the hashes that
|
||||||
|
* generate the keys).
|
||||||
|
*/
|
||||||
|
ssh_remote_bugs |= BUG_SSH2_DERIVEKEY;
|
||||||
|
logevent("We believe remote version has SSH2 key-derivation bug");
|
||||||
|
}
|
||||||
|
|
||||||
if ((!strncmp(imp, "OpenSSH_2.", 10) && imp[10]>='5' && imp[10]<='9') ||
|
if ((!strncmp(imp, "OpenSSH_2.", 10) && imp[10]>='5' && imp[10]<='9') ||
|
||||||
(!strncmp(imp, "OpenSSH_3.", 10) && imp[10]>='0' && imp[10]<='2')) {
|
(!strncmp(imp, "OpenSSH_3.", 10) && imp[10]>='0' && imp[10]<='2')) {
|
||||||
/*
|
/*
|
||||||
@ -3497,6 +3508,7 @@ static void ssh2_mkkey(Bignum K, char *H, char *sessid, char chr,
|
|||||||
SHA_State s;
|
SHA_State s;
|
||||||
/* First 20 bytes. */
|
/* First 20 bytes. */
|
||||||
SHA_Init(&s);
|
SHA_Init(&s);
|
||||||
|
if (!(ssh_remote_bugs & BUG_SSH2_DERIVEKEY))
|
||||||
sha_mpint(&s, K);
|
sha_mpint(&s, K);
|
||||||
SHA_Bytes(&s, H, 20);
|
SHA_Bytes(&s, H, 20);
|
||||||
SHA_Bytes(&s, &chr, 1);
|
SHA_Bytes(&s, &chr, 1);
|
||||||
@ -3504,6 +3516,7 @@ static void ssh2_mkkey(Bignum K, char *H, char *sessid, char chr,
|
|||||||
SHA_Final(&s, keyspace);
|
SHA_Final(&s, keyspace);
|
||||||
/* Next 20 bytes. */
|
/* Next 20 bytes. */
|
||||||
SHA_Init(&s);
|
SHA_Init(&s);
|
||||||
|
if (!(ssh_remote_bugs & BUG_SSH2_DERIVEKEY))
|
||||||
sha_mpint(&s, K);
|
sha_mpint(&s, K);
|
||||||
SHA_Bytes(&s, H, 20);
|
SHA_Bytes(&s, H, 20);
|
||||||
SHA_Bytes(&s, keyspace, 20);
|
SHA_Bytes(&s, keyspace, 20);
|
||||||
|
Loading…
Reference in New Issue
Block a user