С 2014 года известно, что сегменты пути способствуют атакам загрузки отраженных файлов . Давайте предположим, что у нас есть уязвимый API, который отражает то, что мы отправляем ему (очевидно, что URL был реальным, теперь исправленным):
https://google.com/s?q=rfd%22||calc||
{"results":["q", "rfd\"||calc||","I love rfd"]}
Теперь, это безвредно в браузере, так как это JSON, поэтому он не будет отображаться, а браузер скорее предложит загрузить ответ в виде файла. Теперь вот сегменты пути приходят на помощь (для атакующего):
https://google.com/s;/setup.bat;?q=rfd%22||calc||
Все, что находится между точками с запятой (;/setup.bat;
), будет , а не , отправленное веб-службе, но вместо этого браузер интерпретирует его как имя файла ... для сохранения ответа API. Теперь файл с именем setup.bat
будет загружен и запущен, не спрашивая об опасности запуска файлов, загружаемых из Интернета (поскольку в его названии содержится слово "setup"
). Содержимое будет интерпретировано как пакетный файл Windows, и будет выполнена команда calc.exe
.
Предупреждение:
- очистить входные данные вашего API (в этом случае они должны просто разрешать буквенно-цифровые символы); побега не достаточно
- добавить
Content-Disposition: attachment; filename="whatever.txt"
в API, которые не будут отображаться; Google пропустил часть filename
, что фактически облегчило атаку
- добавить
X-Content-Type-Options: nosniff
заголовок к ответам API