This changes the password check on the management interface to be constant
time. Normally the management port should not be exposed in a way that
allows an attacker to even interact with it but making the check constant
time as an additional layer of security is always good.
Patch v2: include NUL byte in comparison
Reported-by: Connor Edwards <cedw@pm.me>
Signed-off-by: Arne Schwabe <arne@rfc2549.org>
Acked-by: Gert Doering <gert@greenie.muc.de>
Message-Id: <
20221220140458.
2666637-1-arne@rfc2549.org>
URL: https://www.mail-archive.com/openvpn-devel@lists.sourceforge.net/msg25784.html
Signed-off-by: Gert Doering <gert@greenie.muc.de>
(cherry picked from commit
e567f34262b0670fd51cbbcb6c6866b046454cee)
{
if (man_password_needed(man))
{
- if (streq(line, man->settings.up.password))
+ /* This comparison is not fixed time but since strlen(time) is based on
+ * the attacker choice, it should not give any indication of the real
+ * password length, use + 1 to include the NUL byte that terminates the
+ * string*/
+ size_t compare_len = min_uint(strlen(line) + 1, sizeof(man->settings.up.password));
+ if (memcmp_constant_time(line, man->settings.up.password, compare_len) == 0)
{
man->connection.password_verified = true;
msg(M_CLIENT, "SUCCESS: password is correct");