Обновить
8K+
3
Олег Усольцев@CynepMyx

DevOps / SecOps инженер

12
Рейтинг
1
Подписчики
Отправить сообщение

Спасибо. Вопрос про IMDS по делу, и ответ скорее нет, но с оговоркой.

Вектор в Roundcube умеет только GET через <link rel=stylesheet>: сервер сам ходит по URL из письма. А IMDSv2 так просто не отдаст. Там сначала нужен PUT на /latest/api/token с заголовком X-aws-ec2-metadata-token-ttl-seconds, и только потом GET с полученным токеном в заголовке X-aws-ec2-metadata-token. Из этого SSRF ни метод на PUT не поменять, ни свой заголовок не подставить, поэтому в режиме required прилетит 401. Плюс у ответа на PUT hop-limit по умолчанию 1, это ещё режет проксирование через контейнер. Отдельно: PUT с заголовком X-Forwarded-For вообще отклоняется, специально против SSRF через прокси.

Итог: на инстансе с IMDSv2-only цепочка обрывается. Проходит она если оставлен IMDSv1 (голый GET без токена) или если рядом торчит другой внутренний GET-эндпоинт: метрики, Redis по HTTP, админка без авторизации. Мораль та же, что в статье: приложение латаешь одним, а доступ к 169.254.169.254 закрываешь на уровне egress и настройками самого IMDS.

Честно оговорюсь: стенд у меня был в Docker, без облачного IMDS, так что это разбор протокола по докам AWS, а не то что я поднял живой EC2 и потыкал. Соберу на реальном инстансе, отпишу отдельно.

И ведь nip.io вещь удобная, для локальной разработки золото. Просто у любого удобного шортката есть тёмная сторона: тут он превратился в готовый обход фильтра приватных адресов. Разработчики Roundcube про nip.io знали и развернули его обратно, а про sslip.io забыли. Одна забытая строчка.

Именно. Каждая фича, которая рендерит что-то из письма, это ещё один парсер над чужим вводом. Хотели Comic Sans, получили SSRF через CSS. Красота требует жертв, обычно чужих.

Информация

В рейтинге
715-й
Откуда
Баку, Азербайджан, Азербайджан
Дата рождения
Зарегистрирован
Активность

Специализация

Системный администратор, DevOps-инженер
Ведущий
От 6 000 $
Linux
Docker
DevSecOps
Nginx
CI/CD
Redis
Базы данных
Prometheus
Grafana
Python