Режим чтения:
Коротко о главном (TL;DR)
  • Спустя полгода после обнаружения критической уязвимости 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 делится своим опытом, чтобы помочь другим разработчикам закрыть аналогичные уязвимости и призывает сообщество к критическому анализу их решения для дальнейшего улучшения безопасности.

Интерактивная проверка защитыВсе калькуляторы ИБ →
Экспресс-тест стойкости пароля к взлому (GPU RTX 5090)
Энтропия: 85 bitsВремя перебора (RTX 5090): 12+ млн летНадёжная защита