Вышел OpenVPN 2.7.5, новое обновление популярного опенсорсного VPN-решения. В этом выпуске разработчики устранили семь уязвимостей, отслеживаемых по идентификаторам CVE. Среди них проблемы использования после освобождения (use-after-free), утечки памяти, ошибки работы с буферами и аварийные завершения серверов или клиентов при определённых настройках.

Наиболее заметное исправление касается Windows-специфичной проблемы в openvpnserv. Некоторые сочетания опций DNS и локальных настроек DNS могли вызывать загрязнение состояния SearchList DNS при операциях подключения и отключения.

OpenVPN 2.7.5 также исправляет две отдельные уязвимости use-after-free. Первая затрагивает ack_write_buf() и может быть вызвана тщательно выверенной последовательностью пакетов управляющего канала и аутентификации. Вторая уязвимость, связанная с tls_wrap_reneg(), обусловлена определённой последовательностью динамических пакетов управляющего канала tls-crypt.

Ещё одно важное исправление на стороне сервера устраняет падение, которое могло происходить при получении некорректно сформированного токена аутентификации, если включена внешняя аутентификация с --auth-gen-token. В релизе также решены две проблемы утечек памяти в tls-crypt-v2, способные вызвать нехватку памяти и аварийное завершение сервера.

Кроме того, в обновление вошло исправление возможного переполнения буфера на один байт в ответах прокси NTLMv2.

Помимо устранения CVE-уязвимостей, в OpenVPN 2.7.5 включён ряд дополнительных исправлений ошибок. На Windows исправлен обход проверки префикса доверенного каталога плагинов, однако разработчики отмечают, что эта проблема не была классифицирована как уязвимость: для её эксплуатации потребовались бы права администратора или социальная инженерия.

Обновление также перерабатывает часть логики преобразования DNS-доменов в openvpnserv и исправляет проблему use-after-free, связанную с опциями DNS при подключении клиента. В конфигурациях сервера, использующих локальные DNS-опции --dns или --dhcp-option, это могло приводить к двойному освобождению памяти и падению сервера.

Прочие исправления улучшают обработку событий UDP при использовании нескольких сокетов, устраняют утечку памяти при разборе адресов DNS-серверов, если их настроено слишком много, и корректируют поведение port-share с несколькими сокетами. Кроме того, исправлена ситуация, когда входящие пакеты RESET tls-crypt-v2 на разных сокетах могли приводить к отправке ответов на неверный IP-адрес клиента или через неподходящий сокет.

Наконец, OpenVPN 2.7.5 гарантирует, что передаваемое значение tun-mtu не может быть меньше TUN_MTU_MIN, что предотвращает отправку сервером опций, способных вызвать assert на клиенте. На Windows код работы с сокетами теперь проверяет длину буфера перед чтением prepended-структуры семейства адресов, избегая возможного чтения за границей, если драйвер DCO поведёт себя некорректно.

Дополнительные сведения доступны в списке изменений.