Критическая уязвимость в библиотеке функций wpa_supplicant

24/04/2015 10:32

В пакете wpa_supplicant, используемом для организации подключения к беспроводной сети во многих дистрибутивах Linux, *BSD и Android, выявлена опасная уязвимость (CVE-2015-1863), которая потенциально может быть использована для выполнения кода злоумышленника при обработке специально оформленных данных в поле SSID при установке или обновлении информации о P2P-пирах. Допустимый размер поля SSID составляет 32 байта, в то время как при передаче данный элемент передаётся в поле, длина которого ограничивается 8 битным счётчиком, т.е. в данном поле допустимо передать до 255 байт данных. Так как в wpa_supplicant отсутствует проверка размера данного поля, под данные размером до 255 байт отводится буфер в 32 байта, а лишние 223 байта перекроют структуры, следующие за полем SSID. В том числе может оказаться перезаписан находящийся в структуре p2p_device указатель, по которому в дальнейшем передаётся управление. Кроме того, около 150 байт перезаписывают область, находящуюся за пределами выделенного из кучи блока памяти. В итоге, при получении от другого устройства пакета с некорректным размером SSID не исключается организация выполнения кода злоумышленника, а также модификация структур wpa_supplicant, инициирование краха или организация утечки содержимого памяти процесса. Для эксплуатации уязвимости атакующий должен быть в пределах досягаемости беспроводной сети, чтобы отправить жертве специально оформленный набор кадров, передающих информацию о P2P-связи. Атака упрощается, если устройство жертвы выполняет активные P2P-операции, такие как поиск узлов в сети (P2P_FIND) или приём запросов на соединение (P2P_LISTEN). Если P2P-операции не выполняются, эксплуатировать уязвимость значительно сложнее. Проблеме подвержены версии wpa_supplicant с 1.0 по 2.4, собранные с опцией CONFIG_P2P (как привило, она включена по умолчанию). Исправление проблемы пока доступно только в виде патча. В качестве обходного пути защиты можно отключить P2P-режим в настройках ("p2p_disabled=1" в файле конфигурации, "P2P_SET disabled 1" в cli) или пересобрать пакет без опции "CONFIG_P2P=y".
Источник