Reverse-прокси — серверы поверх веб-приложений, которые маршрутизируют трафик, управляют заголовками и т. д.
Файл
/etc/nginx/nginx.conf содержит глобальные настройки и строку для подключения всех конфигов из /etc/nginx/conf.d/.http {
...
include /etc/nginx/conf.d/*.conf;
}Эти файлы находятся в контексте
http {}, поэтому их не нужно открывать заново. Часто здесь добавляют дополнительные опции для контекста http, а также определения server {} для каждого приложения.Одна из распространенных ошибок, которая может привести к уязвимости, — алиас со слешом в конце. Это происходит, когда выполняются два условия:
✅В location отсутствует слэш в конце
✅Директива
alias или proxy_pass содержит слэш в конце☝️ Пример выше показывает эту багу дважды. Проблема в том, что
location /static будет соответствовать любому пути, начинающемуся с /static, включая /staticANYTHING или /static../anything. После этого Nginx удаляет этот префикс и продолжает с оставшимся путем. Теперь это может быть
../anything, и при добавлении к static/ или v1/ может привести к переходу на один уровень выше:GET /static../index.php HTTP/1.1
В итоге получаем путь
/app/static/../index.php, который может раскрыть чувствительные исходники в /app/index.php. 💡 Та же идея с
proxy_pass — его можно использовать для доступа к непредназначенной директории на бэкенде, используемой для отладки, других версий или даже другого приложения.
