Pull to refresh
16K+
3
Олег Усольцев@CynepMyx

DevOps / SecOps инженер

23
Rating
1
Subscribers
Send message

Две строки в одном location. Первая это rewrite, у которого в строке замены есть знак вопроса, и за ним что-то стоит. Вторая это любая следующая директива в том же блоке, которая читает безымянный захват от $1 до $9.

Минимальный падающий конфиг:

location / {
    rewrite ^(.*) /new?c=1;
    set $myvar $1;
}

Поодиночке ни одна из них не опасна: убрать вопрос, стоит; убрать set, тоже стоит. И важная тонкость, из-за которой будет много ложных тревог: хвостовой вопрос без аргументов, rewrite ^/old/(.*)$ /new/$1?;, это обычный сброс query string, и он не ломает. Проверял на стенде, таблица со всеми вариантами в разделе про границу.

Порт метрик наружу, да, отдельная классика. Там хотя бы видно глазами, а тут связка расползается по двум строкам, и каждая по отдельности выглядит совершенно нормально.

Спасибо. Вопрос про 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. Красота требует жертв, обычно чужих.

Information

Rating
361-st
Location
Баку, Азербайджан, Азербайджан
Date of birth
Registered
Activity

Specialization

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