Path Traversal - это уязвимость безопасности веб-приложений и систем, при которой злоумышленник может манипулировать параметрами, определяющими путь к файлу или директории, с целью получения несанкционированного доступа к данным за пределами предназначенной корневой директории.
Суть уязвимости заключается в том, что приложение использует пользовательский ввод для построения пути к файловой системе без осуществления достаточной проверки и очистки этого ввода. Злоумышленник, используя специальные последовательности символов, может выйти за границы заданного каталога. В операционных системах на базе Unix и Linux для этого применяется последовательность «../», означающая переход на уровень вверх в дереве каталогов, а в Windows - аналогичная последовательность «..\». Для обхода простых фильтров часто используются их кодированные варианты, такие как «%2e%2e%2f» или Unicode-представления.
На практике эксплуатация выглядит как модификация параметров в URL-запросе, полях формы или заголовках. Например, запрос к файлу https://example.com/load?name=report.txt может быть изменен на https://example.com/load?name=../../../etc/passwd. Если серверное приложение некорректно обрабатывает параметр name, оно может интерпретировать эту последовательность как команду подняться на три уровня вверх от текущей рабочей директории и затем обратиться к системному файлу /etc/passwd, отправив его содержимое злоумышленнику.
Последствия успешной Path Traversal атаки варьируются от чтения конфиденциальных файлов до полного компрометирования системы. Атакующий может получить доступ к паролям, ключам шифрования, конфигурационным файлам, исходному коду приложения и журналам. В случаях, когда приложению разрешена запись, уязвимость может привести к созданию или модификации файлов, что открывает путь к дефейсу, подмене контента или даже установке вредоносного программного обеспечения для удаленного управления сервером.
Основная причина возникновения уязвимости - недостаточная валидация входных данных. Защита от Path Traversal строится на комбинации методов, включая строгую нормализацию и канонизацию путей, проверку того, что итоговый путь начинается с разрешенной базовой директории, использование белых списков допустимых имен файлов, а также хранение файлов за пределами публичной корневой директории веб-сервера. Также критически важно соблюдать принцип минимальных привилегий, запуская веб-сервис от имени пользователя с ограниченными правами доступа к файловой системе.