Исследователи из компании Eset раскрыли на проходящей в эти дни конференции RSA 2020 сведения об уязвимости (CVE-2019-15126) в беспроводных чипах Cypress и Broadcom, позволяющей дешифровать перехваченный Wi-Fi трафик, защищённый с использованием протокола WPA2. Уязвимости присвоено кодовое имя Kr00k. Проблема охватывает чипы FullMAC (Wi-Fi стек реализован на стороне чипа, а не драйвера), применяемые в широком спектре потребительских устройств, от смартфонов известных производителей (Apple, Xiaomi, Google, Samsung), до умных колонок (Amazon Echo, Amazon Kindle), плат (Raspberry Pi 3) и точек беспроводного доступа (Huawei, ASUS, Cisco). Уязвимость вызвана некорректной обработкой ключей шифрования при отсоединении (диссоциации) устройства от точки доступа. При отсоединении выполняется обнуление хранимого в памяти чипа сессионного ключа (PTK), так как дальнейшая отправка данных в текущем сеансе производиться не будет. Суть уязвимости в том, что оставшиеся в буфере передачи (TX) данные шифруются уже очищенным ключом, состоящим только из нулей и, соответственно, могут быть легко расшифрованы при перехвате. Пустой ключ применяется только к остаточным данным в буфере, размер которого составляет несколько килобайт. Таким образом, атака строится на искусственной отправке определённых кадров, вызывающих диссоциацию, и перехвате отправляемых следом данных. Диссоциация обычно применяется в беспроводных сетях для переключения с одной точки доступа на другую во время роуминга или при потере связи с текущей точкой доступа. Диссоциацию можно вызвать отправкой управляющего кадра, который передаётся в незашифрованном виде и не требует аутентификации (атакующему достаточно достижимости Wi-Fi сигнала, но не требуется подключение к беспроводной сети). Атака тестировалась только с использованием протокола WPA2, возможность совершения атаки на WPA3 не проверялась. По предварительной оценке потенциально уязвимость может затронуть миллиарды находящихся в обиходе устройств. На устройствах с чипами Qualcomm, Realtek, Ralink и Mediatek проблема не проявляется. При этом расшифровка трафика возможна как при обращении уязвимого клиентского устройства к беспроблемной точке доступа, так и в случае обращения не подверженного проблеме устройства к точке доступа, на которой проявляется уязвимость. Многие производители потребительских устройств уже выпустили обновления прошивок с устранением уязвимости (например, компания Apple устранила уязвимость ещё в октябре прошлого года). Следует отметить, что уязвимость затрагивает шифрование на уровне беспроводной сети и позволяет проанализировать лишь устанавливаемые пользвователем незащищённые соединения, но не даёт возможность скомпрометировать соединения с шифрованием на уровне приложения (HTTPS, SSH, STARTTLS, DNS over TLS, VPN и т.п.). Опасность атаки также снижает то, что за раз атакующий может расшифровать только несколько килобайтов данных, которые находились во время отсоединения в буфере передачи. Для успешного захвата отправляемых через незащищённое соединение конфиденциальных данных, атакующий либо должен точно знать момент их отправки, либо постоянно инициировать отсоединение от точки доступа, что бросится в глаза пользователю из-за постоянных перезапусков беспроводного соединения. Некоторые из устройств, протестированных в Eset на возможность совершения атаки: Amazon Echo 2nd gen Amazon Kindle 8th gen Apple iPad mini 2 Apple iPhone 6, 6S, 8, XR Apple MacBook Air Retina 13-inch 2018 Google Nexus 5 Google Nexus 6 Google Nexus 6S Raspberry Pi 3 Samsung Galaxy S4 GT-I9505 Samsung Galaxy S8 Xiaomi Redmi 3S Беспроводные маршрутизаторы ASUS RT-N12, Huawei B612S-25d, Huawei EchoLife HG8245H, Huawei E5577Cs-321 Точки доступа Cisco 27.02.2020 https://www.opennet.ru/opennews/art.shtml?num=52441
Update: https://www.opennet.ru/opennews/art.shtml?num=53512 (affects Qualcomm and MediaTek chipsets) CVE: CVE-2020-3702 Proof-of-Concept: https://github.com/eset/malware-research/tree/master/kr00k Installation and running: Code: # Requires Python 3 and Wireshark sudo pip install scapy pycryptodome wget https://raw.githubusercontent.com/eset/malware-research/master/kr00k/kr00k.py sudo python kr00k.py -i <interface> -b <AP BSSID> -v <client MAC>