|
|
934b47 |
From 3ea2a5a026e73d81cd9a3e9bbd4300c433004bfa Mon Sep 17 00:00:00 2001
|
|
|
934b47 |
From: Mathy Vanhoef <mathy.vanhoef@nyu.edu>
|
|
|
934b47 |
Date: Wed, 5 Jun 2019 19:21:06 +0000
|
|
|
934b47 |
Subject: [PATCH] EAP-pwd: fix side-channel leak where 1 in 2018 handshakes
|
|
|
934b47 |
fail
|
|
|
934b47 |
|
|
|
934b47 |
Previously the Hunting and Pecking algorithm of EAP-pwd aborted when
|
|
|
934b47 |
more than 10 iterations are needed. Every iteration has a 50% chance
|
|
|
934b47 |
of finding the password element. This means one in every 2048 handshakes
|
|
|
934b47 |
will fail, in which case an error frame is sent to the client. This
|
|
|
934b47 |
event leaks information that can be abused in an offline password
|
|
|
934b47 |
brute-force attack. More precisely, the adversary learns that all 10
|
|
|
934b47 |
iterations failed for the given random EAP-pwd token. Using the same
|
|
|
934b47 |
techniques as in the Dragonblood attack, this can be used to brute-force
|
|
|
934b47 |
the password.
|
|
|
934b47 |
|
|
|
934b47 |
This patch fixes the above issue by executing enough iterations such that
|
|
|
934b47 |
the password element is always found eventually.
|
|
|
934b47 |
|
|
|
934b47 |
Note that timing and cache leaks remain a risk against the current
|
|
|
934b47 |
implementation of EAP-pwd.
|
|
|
934b47 |
---
|
|
|
934b47 |
src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c | 2 +-
|
|
|
934b47 |
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
|
934b47 |
|
|
|
934b47 |
diff --git a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
|
|
|
934b47 |
index c54f08c030..d94851c3aa 100644
|
|
|
934b47 |
--- a/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
|
|
|
934b47 |
+++ b/src/modules/rlm_eap/types/rlm_eap_pwd/eap_pwd.c
|
|
|
934b47 |
@@ -192,7 +192,7 @@ int compute_password_element (pwd_session_t *session, uint16_t grp_num,
|
|
|
934b47 |
}
|
|
|
934b47 |
ctr = 0;
|
|
|
934b47 |
while (1) {
|
|
|
934b47 |
- if (ctr > 10) {
|
|
|
934b47 |
+ if (ctr > 100) {
|
|
|
934b47 |
DEBUG("unable to find random point on curve for group %d, something's fishy", grp_num);
|
|
|
934b47 |
goto fail;
|
|
|
934b47 |
}
|