Ситуация: бэкенд уязвим к Path Traversal, но пробиться через
../ не выходит — мешает Nginx-прокси, который сразу рубит запрос с ошибкой 400 Bad Request, как только вылезает выше корня.😵 Примеры:
/../../anything → 400 Bad Request
/deep/path/../../anything → OK
/deep/path/../../../anything → 400 Bad Request
Но есть нюанс: если в конфиге отключён
merge_slashes (значение off), Nginx не будет схлопывать двойные и более слэши (//) перед проверкой. Это позволяет обойти его:1. Для Nginx путь выглядит очень глубоким из-за
/////.2. Прокси думает, что ты ещё внутри разрешённого диапазона.
3. А вот приложение, которое реально работает с файловой системой, уже нормализует путь, схлопывает все
// в / и получает нормальный Path Traversal.💡 Если уязвимый эндпоинт лежит не в корне, а глубже (например
/deep/path), то уже оттуда можно подниматься на несколько уровней без всяких merge_slashes off. Как видно из примера выше, /deep/path/../../anything всё ещё отрабатывает.
