- Спустя полгода после обнаружения критической уязвимости tun0 в Android VPN-клиентах, позволяющей исключенным приложениям обходить туннель и раскрывать IP-адрес VPN-сервера, портал PROSTO24 публикует...
- Уязвимость проявляется, когда приложение, исключенное из VPN, привязывает сокет к интерфейсу tun0.
- Из 28 проанализированных VPN-клиентов только два предприняли шаги для проверки владельца соединения, однако оба изначально имели одну и ту же ошибку: они...
AmneziaVPN устраняет критическую уязвимость tun0, другие VPN-клиенты все еще уязвимы
Спустя полгода после обнаружения критической уязвимости tun0 в Android VPN-клиентах, позволяющей исключенным приложениям обходить туннель и раскрывать IP-адрес VPN-сервера, портал PROSTO24 публикует обзор текущей ситуации. Эта проблема не требует root-доступа и не решается локальными прокси-паролями.
Механизм утечки и проверка
Уязвимость проявляется, когда приложение, исключенное из VPN, привязывает сокет к интерфейсу tun0. Это позволяет ему передавать данные через VPN-туннель и получать информацию об адресе VPN-сервера. Проверить наличие утечки можно, выполнив команду curl --interface tun0 https://ifconfig.me в Termux на Android-телефоне с исключенным из VPN приложением. Если в ответ приходит адрес VPN-сервера, утечка присутствует.
Реакция рынка и действия AmneziaVPN
Из 28 проанализированных VPN-клиентов только два предприняли шаги для проверки владельца соединения, однако оба изначально имели одну и ту же ошибку: они пропускали соединения с «неизвестным владельцем», к которым относятся и исключенные Android-приложения. Один клиент оперативно исправил проблему, второй пока не отреагировал.
Команда AmneziaVPN активно занялась устранением этой уязвимости (issue #2457). Несмотря на то, что сама проверка пакетов в AmneziaWG уместилась в одну строку кода: if uidfilter.Supported && !device.tun.uidGate.AllowOutboundPacket(elem.packet, device) { continue }, весь процесс потребовал около 500 строк кода на Go, аналогичное количество тестов, мост через JNI и три раунда ревью. Разработчики AmneziaVPN отмечают, что ядро Android пропускает такие пакеты, а политика «владелец неизвестен» приравнивается к отказу в разрешении трафика. В процессе работы была обнаружена и исправлена ошибка в собственном мосте уже после ревью. Тестирование на телефоне с активированным фильтром показало 0 попыток обхода из 6, тогда как без фильтра все 6 попыток были успешными.
Дальнейшие шаги и призыв к сотрудничеству
AmneziaVPN делится своим опытом, чтобы помочь другим разработчикам закрыть аналогичные уязвимости и призывает сообщество к критическому анализу их решения для дальнейшего улучшения безопасности.
Интересно, что AmneziaVPN так оперативно отреагировала на уязвимость tun0. Однако, всегда возникает вопрос о реальной сложности имплементации подобных патчей для других клиентов. Не является ли это решение слишком специфичным для их архитектуры? И насколько трудоёмко будет поддерживать такую проверку UID на разных версиях Android, учитывая постоянные изменения в системе? Хотелось бы увидеть более широкий анализ затрат и усилий для других разработчиков.