← Все статьиСерверы, безопасность и данные
· ~2 мин чтения
Как через публичный API можно случайно раскрыть инфраструктуру сайта
Не всякая утечка данных — это взлом. Иногда сервер сам, честно и по правилам, отдаёт данные, которые отдавать не следовало — просто потому что этот путь никто не считал секретным.
Безобидный эндпоинт с неудобным содержимым
Классический пример — статус-эндпоинт вроде /api/infra-status, который задумывался как техническая диагностика: жив ли сервер, отвечают ли фоновые сервисы. Разработчик добавляет в ответ то, что удобно для собственной отладки, — и в какой-то момент туда попадают реальные IP-адреса всех серверов инфраструктуры, включая тот, на котором стоит сам сайт. Эндпоинт публичный, потому что никто не предполагал, что кто-то посторонний будет туда заходить намеренно.
Почему это вообще проблема
Один IP-адрес сам по себе не открывает доступ ни к чему. Но набор реальных адресов всех серверов — это готовая карта инфраструктуры: сколько узлов, как они, вероятно, связаны по названиям и ролям, куда стоит целиться дальше при разведке перед более серьёзной атакой. Такие «безобидные» утечки редко эксплуатируются сами по себе — они снижают стоимость следующего шага для того, кто ищет, куда бить.
Как это находят
Не через сложный инструментарий, а обычным чтением: список публичных маршрутов API, проверка каждого без авторизации, сравнение того, что отдаётся, с тем, что должно быть видно постороннему посетителю. Статус-эндпоинты, health-check'и, отладочные ручки, оставленные «на всякий случай», — обычные кандидаты, потому что их не воспринимают как часть периметра безопасности.
Как чинить
Решение не в том, чтобы закрыть эндпоинт полностью, если он нужен для мониторинга, — а в том, чтобы отдавать по нему обезличенные данные: статус «жив/не жив» и условные имена узлов вместо реальных IP и внутренних адресов. Диагностика для своей команды и данные, доступные любому в интернете без авторизации, — это разные вещи, и путать их не стоит просто потому, что технически это один и тот же HTTP-ответ.
Проверьте свои эндпоинты
Простой вопрос к себе: какие маршруты вашего API открываются без авторизации и что именно они отдают? Статус-эндпоинты, health-check'и и отладочные ручки «на всякий случай» — первые кандидаты. Такие находки редко выглядят как классическая «уязвимость» из презентаций про безопасность — это обычный рабочий эндпоинт, который просто отдаёт больше, чем должен. Чтобы находить подобное системно, а не по счастливой случайности, проверка публичных API, заголовков ответа сервера и того, что видно постороннему без единого запроса под авторизацией, входит в аудит безопасности.