]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
SAE: Fix confirm message validation in error cases
authorJouni Malinen <jouni@codeaurora.org>
Tue, 5 Mar 2019 21:43:25 +0000 (23:43 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 9 Apr 2019 14:11:15 +0000 (17:11 +0300)
Explicitly verify that own and peer commit scalar/element are available
when trying to check SAE confirm message. It could have been possible to
hit a NULL pointer dereference if the peer element could not have been
parsed. (CVE-2019-9496)

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
src/common/sae.c

index eaf825d19ff364774a191d3f7e63d5c17dc02e1f..5a50294a6dc8f68be198082dee31db6d48156869 100644 (file)
@@ -1487,23 +1487,31 @@ int sae_check_confirm(struct sae_data *sae, const u8 *data, size_t len)
 
        wpa_printf(MSG_DEBUG, "SAE: peer-send-confirm %u", WPA_GET_LE16(data));
 
-       if (sae->tmp == NULL) {
+       if (!sae->tmp || !sae->peer_commit_scalar ||
+           !sae->tmp->own_commit_scalar) {
                wpa_printf(MSG_DEBUG, "SAE: Temporary data not yet available");
                return -1;
        }
 
-       if (sae->tmp->ec)
+       if (sae->tmp->ec) {
+               if (!sae->tmp->peer_commit_element_ecc ||
+                   !sae->tmp->own_commit_element_ecc)
+                       return -1;
                sae_cn_confirm_ecc(sae, data, sae->peer_commit_scalar,
                                   sae->tmp->peer_commit_element_ecc,
                                   sae->tmp->own_commit_scalar,
                                   sae->tmp->own_commit_element_ecc,
                                   verifier);
-       else
+       } else {
+               if (!sae->tmp->peer_commit_element_ffc ||
+                   !sae->tmp->own_commit_element_ffc)
+                       return -1;
                sae_cn_confirm_ffc(sae, data, sae->peer_commit_scalar,
                                   sae->tmp->peer_commit_element_ffc,
                                   sae->tmp->own_commit_scalar,
                                   sae->tmp->own_commit_element_ffc,
                                   verifier);
+       }
 
        if (os_memcmp_const(verifier, data + 2, SHA256_MAC_LEN) != 0) {
                wpa_printf(MSG_DEBUG, "SAE: Confirm mismatch");