mirror of
https://github.com/OpenVPN/openvpn.git
synced 2025-05-09 05:31:05 +08:00
Fix bounds check in read_key()
The bounds check in read_key() was performed after using the value, instead of before. If 'key-method 1' is used, this allowed an attacker to send a malformed packet to trigger a stack buffer overflow. Fix this by moving the input validation to before the writes. Note that 'key-method 1' has been replaced by 'key method 2' as the default in OpenVPN 2.0 (released on 2005-04-17), and explicitly deprecated in 2.4 and marked for removal in 2.5. This should limit the amount of users impacted by this issue. CVE: 2017-12166 Signed-off-by: Steffan Karger <steffan.karger@fox-it.com> Acked-by: Gert Doering <gert@greenie.muc.de> Acked-by: David Sommerseth <davids@openvpn.net> Message-Id: <80690690-67ac-3320-1891-9fecedc6a1fa@fox-it.com> URL: https://www.mail-archive.com/search?l=mid&q=80690690-67ac-3320-1891-9fecedc6a1fa@fox-it.com Signed-off-by: David Sommerseth <davids@openvpn.net> (cherry picked from commit fce34375295151f548a26c2d0eb30141e427c81a)
This commit is contained in:
parent
244c9681ae
commit
c560f95e70
5
crypto.c
5
crypto.c
@ -1442,13 +1442,14 @@ read_key (struct key *key, const struct key_type *kt, struct buffer *buf)
|
|||||||
if (!buf_read (buf, &hmac_length, 1))
|
if (!buf_read (buf, &hmac_length, 1))
|
||||||
goto read_err;
|
goto read_err;
|
||||||
|
|
||||||
|
if (cipher_length != kt->cipher_length || hmac_length != kt->hmac_length)
|
||||||
|
goto key_len_err;
|
||||||
|
|
||||||
if (!buf_read (buf, key->cipher, cipher_length))
|
if (!buf_read (buf, key->cipher, cipher_length))
|
||||||
goto read_err;
|
goto read_err;
|
||||||
if (!buf_read (buf, key->hmac, hmac_length))
|
if (!buf_read (buf, key->hmac, hmac_length))
|
||||||
goto read_err;
|
goto read_err;
|
||||||
|
|
||||||
if (cipher_length != kt->cipher_length || hmac_length != kt->hmac_length)
|
|
||||||
goto key_len_err;
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user