Прослушивание всех сетевых интерфейсов через локальный сокет (0.0.0.0)
![]() |
Критичность: ВЫСОКИЙ |
| Способ обнаружения: DAST, NETWORKING |
Описание
Приложение создаёт слушающий сокет (java.net.ServerSocket) и привязывает его к адресу 0.0.0.0 (или эквиваленту :: для IPv6) вместо loopback-адреса 127.0.0.1. Привязка к 0.0.0.0 означает, что сокет слушает все сетевые интерфейсы устройства и доступен не только самому приложению, но и другим процессам на устройстве, а также любым узлам в той же сети (Wi-Fi, сотовая сеть).
Пример небезопасного кода:
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress("0.0.0.0", 8080)); // доступен из внешней сети
Безопасный вариант — привязка только к loopback:
ServerSocket server = new ServerSocket();
server.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 8080));
Проблема
- Доступ из локальной сети. Любой узел в той же подсети может подключиться к открытому порту. Если на нём работает встроенный сервер или отладочный интерфейс, это открывает несанкционированный доступ к функциональности и данным приложения.
- Межприложенческий доступ на устройстве. Другие (в том числе вредоносные) приложения могут подключиться к сокету и взаимодействовать с сервисом в обход проверок.
- Отсутствие аутентификации. Сервис, рассчитанный на «локальное доверенное окружение», обычно не проверяет вызывающую сторону — при привязке к
0.0.0.0это приводит к удалённой утечке данных и выполнению привилегированных операций. - Удалённая эксплуатация уязвимостей. Любые дефекты слушающего сервиса (инъекции, переполнения, обход логики) становятся эксплуатируемыми по сети.
Рекомендации
-
Привязывайтесь только к loopback-интерфейсу (
127.0.0.1/InetAddress.getLoopbackAddress()). Не используйте0.0.0.0без явной и обоснованной необходимости. -
Если внешний доступ действительно нужен — обязательно внедрите аутентификацию и авторизацию (взаимный TLS, токены), ограничьте источники подключений и шифруйте трафик.
-
Используйте Unix domain sockets /
LocalSocketвместо TCP для взаимодействия в пределах устройства. -
Проверяйте конфигурацию в CI. Не допускайте попадания привязки к
0.0.0.0(часто остаётся от отладочных серверов) в production-сборки. -
Минимизируйте время жизни слушающего порта — открывайте его только на время выполнения задачи.
