wlantest: Detect and report plaintext payload in protected frames
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
839bab785b
commit
80d4122159
3 changed files with 21 additions and 0 deletions
|
@ -92,6 +92,7 @@ int read_cap_file(struct wlantest *wt, const char *fname)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Packet was read without problems */
|
/* Packet was read without problems */
|
||||||
|
wt->frame_num++;
|
||||||
wpa_printf(MSG_EXCESSIVE, "pcap hdr: ts=%d.%06d "
|
wpa_printf(MSG_EXCESSIVE, "pcap hdr: ts=%d.%06d "
|
||||||
"len=%u/%u",
|
"len=%u/%u",
|
||||||
(int) hdr->ts.tv_sec, (int) hdr->ts.tv_usec,
|
(int) hdr->ts.tv_sec, (int) hdr->ts.tv_usec,
|
||||||
|
|
|
@ -191,6 +191,23 @@ static u8 * try_all_ptk(struct wlantest *wt, int pairwise_cipher,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void check_plaintext_prot(struct wlantest *wt,
|
||||||
|
const struct ieee80211_hdr *hdr,
|
||||||
|
const u8 *data, size_t len)
|
||||||
|
{
|
||||||
|
if (len < 8 + 3 || data[8] != 0xaa || data[9] != 0xaa ||
|
||||||
|
data[10] != 0x03)
|
||||||
|
return;
|
||||||
|
|
||||||
|
add_note(wt, MSG_DEBUG,
|
||||||
|
"Plaintext payload in protected frame");
|
||||||
|
wpa_printf(MSG_INFO, "Plaintext payload in protected frame #%u: A2="
|
||||||
|
MACSTR " seq=%u",
|
||||||
|
wt->frame_num, MAC2STR(hdr->addr2),
|
||||||
|
WLAN_GET_SEQ_SEQ(le_to_host16(hdr->seq_ctrl)));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void rx_data_bss_prot_group(struct wlantest *wt,
|
static void rx_data_bss_prot_group(struct wlantest *wt,
|
||||||
const struct ieee80211_hdr *hdr,
|
const struct ieee80211_hdr *hdr,
|
||||||
size_t hdrlen,
|
size_t hdrlen,
|
||||||
|
@ -241,6 +258,7 @@ static void rx_data_bss_prot_group(struct wlantest *wt,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_plaintext_prot(wt, hdr, data, len);
|
||||||
keyid = data[3] >> 6;
|
keyid = data[3] >> 6;
|
||||||
if (bss->gtk_len[keyid] == 0 && bss->group_cipher != WPA_CIPHER_WEP40)
|
if (bss->gtk_len[keyid] == 0 && bss->group_cipher != WPA_CIPHER_WEP40)
|
||||||
{
|
{
|
||||||
|
@ -401,6 +419,7 @@ static void rx_data_bss_prot(struct wlantest *wt,
|
||||||
tdls = found;
|
tdls = found;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
check_plaintext_prot(wt, hdr, data, len);
|
||||||
if ((sta == NULL ||
|
if ((sta == NULL ||
|
||||||
(!sta->ptk_set && sta->pairwise_cipher != WPA_CIPHER_WEP40)) &&
|
(!sta->ptk_set && sta->pairwise_cipher != WPA_CIPHER_WEP40)) &&
|
||||||
tk == NULL) {
|
tk == NULL) {
|
||||||
|
|
|
@ -195,6 +195,7 @@ struct wlantest {
|
||||||
unsigned int rx_ctrl;
|
unsigned int rx_ctrl;
|
||||||
unsigned int rx_data;
|
unsigned int rx_data;
|
||||||
unsigned int fcs_error;
|
unsigned int fcs_error;
|
||||||
|
unsigned int frame_num;
|
||||||
|
|
||||||
void *write_pcap; /* pcap_t* */
|
void *write_pcap; /* pcap_t* */
|
||||||
void *write_pcap_dumper; /* pcpa_dumper_t */
|
void *write_pcap_dumper; /* pcpa_dumper_t */
|
||||||
|
|
Loading…
Reference in a new issue