Внутренние сервисы открыты через «доверенные» адреса
Кластер пускал всех с доверенных IP. Мы нашли три независимых пути в этот список.
Заказчик: · NDA
- Доступиз интернета, без VPN
- Под угрозойлоги всего кластера
- Исправленов тот же день
О продукте
Платформа анализа соцсетей работала в Kubernetes на собственном оборудовании. Единый ingress выбирал внутренний сервис по HTTP-заголовку Host. Доступ разрешался примерно с 200 доверенных IP-адресов, включая публичные прокси и серверы компании.
Где была ошибка
Публичный edge-прокси принимал PROXY-протокол из интернета и передавал Host клиента без проверки. Для ingress запрос приходил с доверенного адреса прокси, но имя внутреннего сервиса выбирал внешний клиент.
Два старых балансировщика тоже передавали чужой Host. Ещё 12 доверенных IP уже принадлежали другим клиентам хостинга. Поэтому закрытие одного прокси оставляло два независимых пути к внутренним сервисам, включая хранилище логов без отдельной аутентификации.
Чем это грозило
- Доступ ко всем внутренним сервисам
- Чтение логов с учётными данными
- Подброс ложных событий в мониторинг
Как доказали
Без VPN и учётных данных получили ответ внутреннего приложения и счётчик миллиардов записей в хранилище логов. Принадлежность 12 чужих адресов проверили через API хостинга. Демонстрации повторили из двух внешних сетей.
Первое исправление не перекрыло все пути. После итоговых правок повторная проверка подтвердила: внутренние маршруты закрыты, публичные сайты продолжают работать.
Как исправили
IP-адрес — не пароль. И проверяйте исправление снаружи: первое в этой истории не сработало.
Исправлено