Для эксплуатации уязвимости (CVE-2024-3596) атакующий должен иметь возможность перехвата транзитного трафика и проведения полноценной MITM-атаки, позволяющей читать, перехватывать, блокировать и изменять входящие и исходящие транзитные UDP-пакеты, отправляемые точками доступа для запроса аутентификации клиентов (Access-Request) и возвращаемые RADIUS-сервером с подтверждением или отклонением операции. Перехватив запрос аутентификации атакующий может направить фиктивный ответ, указав в этом ответе иной тип результата (например, Access-Accept вместо Access-Reject). Атакующий также потенциально может перехватить ответ Access-Challenge, используемый при двухфакторной аутентификации, и заменить его на ответ Access-Accept для обхода прохождения дополнительного этапа проверки.
Атака основана на том, что протокол RADIUS использует в качестве транспорта UDP и верифицирует целостность передаваемых сообщений при помощи алгоритма MD5. Для верификации сообщений, передаваемых между сервером доступа и RADIUS-сервером, применяется секретный ключ, известный точке доступа и RADIUS-серверу, но неизвестный атакующему.
В ответ на запрос аутентификации RADIUS-сервер генерирует MD5-хэш, при помощи которого сервер доступа может удостовериться, что сообщение отправлено авторизированным сервером. MD5-хэш охватывает присланное в запросе случайное значение, идентификатор запроса, возвращаемые атрибуты и секретный ключ.
Атакующий в ходе MITM-атаки может перехватить переданный в запросе идентификатор и случайное значение, а также может предсказать код операции, размер и атрибуты. Задача сводится к формированию корректного проверочного хэша, который бы соответствовал изменённому результату операции и проходил проверку через хэширование с использованием секретного ключа. Алгоритм MD5 не является стойким к подбору коллизий, что позволяет атакующему, манипулируя с не имеющим значения добавочным заполнением, подобрать сочетание данных с нужными параметрами, MD5-хэш которого будет совпадать с MD5-хэшем исходного ответа, и отправить фиктивный ответ с кодом успешного прохождения аутентификации (Access-Accept) вместо сообщения с информацией об ошибке.
Так как при обработке пакетов с запросом доступа (Access-Request) не применяется аутентификация и проверка целостности, в ходе атаки в исходный запрос от сервера доступа атакующий может подставить дополнительный атрибут «Proxy-State», который будет отражён RADIUS-сервером в своём ответе. Содержимое «Proxy-State» подбирается с учётом коллизии так, что значение проверочного MD5-хэша в реальном и поддельном ответах будут идентичны. При проведении эксперимента поиск коллизии в MD5 для совершения атаки занял 3-6 минут, что больше чем типовой таймаут в 30-60 секунд, но время поиска коллизии может быть сокращено за счёт использования более мощного оборудования, привлечения GPU и распараллеливания операций.
В качестве основной меры для защиты от уязвимости предлагается задействовать протокол EAP (Extensible Authentication Protocol, RFC 3579), в котором для дополнительной верификации сообщений используется атрибут Message-Authenticator. Для защиты от атаки также можно использовать расширения протокола (RadSec), включающие передачу RADIUS-сообщений через шифрованные каналы на базе TLS или DTLS. Кроме того, можно сократить до минимума значения таймаутов получения ответа и заблокировать ответы с атрибутом Proxy-State. Передача RADIUS-сообщений поверх TCP усложняет атаку, но не исключает её проведение.
Код для проведения атаки пока не опубликован в открытом доступе, но проекту hashclash переданы изменения, улучшающие подбор коллизий в MD5 с учётом специфики атаки. В RADIUS-сервере FreeRADIUS проблема устранена в выпусках 3.0.27 и 3.2.5 через включение обязательного применения атрибута Message-Authenticator и добавление настройки для ограничения обработки пакетов с атрибутом Proxy-State.
Источник: http://www.opennet.ru/opennews/art.shtml?num=61517