This concerns a remote buffer overflow vulnerability in OpenVPN. It has been fixed in OpenVPN 2.4.4 and 2.3.18. It is suspected that only a small number of users is vulnerable to this issue, because it requires having explicitly enabled the outdated ‘key method 1’.
The advisory can be found here: https://community.openvpn.net/openvpn/wiki/CVE-2017-12166
If you appreciate my discovery, you may donate some BTC to address 1BnLyXN2QwdMZLZTNqKqY48bU4hN2A3MwZ
In ssl.c, key_method_1_read() calls read_key() which doesn’t perform adequate
bounds checks. cipher_length and hmac_length are specified by the
peer:
1643 uint8_t cipher_length; 1644 uint8_t hmac_length; 1645 1646 CLEAR(*key); 1647 if (!buf_read(buf, &cipher_length, 1)) 1648 { 1649 goto read_err; 1650 } 1651 if (!buf_read(buf, &hmac_length, 1)) 1652 { 1653 goto read_err; 1654 }
And this many bytes of data are then read into key->cipher and key->hmac:
1656 if (!buf_read(buf, key->cipher, cipher_length)) 1657 { 1658 goto read_err; 1659 } 1660 if (!buf_read(buf, key->hmac, hmac_length)) 1661 { 1662 goto read_err; 1663 }
In other words, it’s a classic example of lack of a bounds check resulting in a buffer overflow.