Компания Mozilla объявила о завершении независимого аудита клиентского ПО для подключения к сервису Mozilla VPN. В ходе аудита был выполнен анализ обособленного клиентского приложения, написанного с использованием библиотеки Qt и поставляемого для Linux, macOS, Windows, Android и iOS. Работу Mozilla VPN обеспечивает более 400 серверов шведского VPN-провайдера Mullvad, размещённых в более чем 30 странах. Подключение к VPN-сервису производится при помощи протокола WireGuard.
Аудит выполнен компанией Cure53, в своё время проводившей аудит проектов NTPsec, SecureDrop, Cryptocat, F-Droid и Dovecot. Аудит затрагивал проверку исходных текстов и включал проведение тестов для выявления возможных уязвимостей (вопросы, связанные с криптографией не рассматривались). В ходе проверки выявлено 16 проблем с безопасностью, 8 из которых имели характер рекомендаций, 5 присвоен низкий уровень опасности, двум — средний, а одной — высокий.
При этом лишь одна проблема со средним уровнем опасности была отнесена к категории уязвимостей, так как только она была пригодна для эксплуатации. Указанная проблема приводила к утечке сведений о применение VPN в коде для определения captive portal из-за отправки незашифрованных прямых запросов по HTTP, передаваемых вне VPN-туннеля и раскрывающих основной IP-адрес пользователя в случае если атакующий может контролировать транзитный трафик. Проблема решается отключением режима определения captive portal в настройках.
Вторая проблема среднего уровня опасности связана с отсутствием должной чистки нечисловых значений в номере порта, что позволяет организовать утечку параметров аутентификации OAuth через подмену номера порта на строку вида «1234@example.com», что приведёт к установке тега, обращающегося к example.com вместо 127.0.0.1.
Третья проблема, помеченная как опасная, позволяет любому локальному приложению без аутентификации обратиться к VPN-клиенту через WebSocket, привязанный к localhost. В качестве примера показано, как при активном VPN-клиенте любой сайт мог организовать создание и отправку скриншота через генерацию события screen_capture. Проблема не отнесена к категории уязвимостей, так как WebSocket использовался только во внутренних тестовых сборках и применение данного канала связи лишь планировалось в будущем для организации взаимодействия с браузерным дополнением.