🛡 Защищаем свои ресурсы. Часть 8: Уязвимости при загрузке файлов (File Upload)
Всем привет 👋 Продолжаем образовательную рубрику про уязвимости, которые часто недооценивают. Сегодня разберём одну из самых опасных и при этом самых распространённых ошибок - загрузку файлов.
Если коротко: File Upload - это когда пользователь загружает файл, а приложение слишком ему доверяет.
Что такое уязвимость загрузки файлов
Уязвимости при загрузке файлов возникают, когда веб-приложение позволяет пользователю загрузить файл на сервер, но:
• плохо проверяет расширение • не контролирует тип содержимого • доверяет имени файла • не проверяет путь загрузки • сохраняет файл напрямую в файловую систему
В результате загруженный файл может стать не картинкой, а точкой входа.
Как это выглядит на практике
Частый сценарий: на сайте есть загрузка аватара или документа.
Ожидание: пользователь загружает изображение.
Реальность при ошибке: вместо картинки на сервер попадает исполняемый файл, который можно вызвать напрямую через браузер.
И сервер сам его выполнит.
Типичные ошибки, которые приводят к проблеме На практике уязвимости появляются из-за:
• проверки расширений через чёрный список • доверия Content-Type из запроса • возможности менять имя файла • отсутствия нормализации пути • загрузки файлов в web-доступные каталоги • проверки «до», а не «после» сохранения
Всё это по отдельности кажется мелочью. Вместе - превращается в полноценный доступ.
Что можно получить через File Upload
Через неправильную загрузку файлов злоумышленник может:
• читать файлы на сервере • получать конфигурации приложения • выполнять код • обходить авторизацию • развивать атаку дальше
Очень часто это не финальная точка, а начало цепочки.
Почему такие уязвимости всё ещё встречаются Причины классические:
• «Это же просто аватар» • «Мы проверяем расширение» • «Контент-тайп же картинка» • «Пользователь не догадается» • устаревшие подходы и примеры из интернета
И почти всегда - отсутствие системного подхода.
Как защищаются от уязвимостей загрузки файлов
Базовые и обязательные меры:
• использовать белый список допустимых расширений • игнорировать имя файла от пользователя • переименовывать файлы при сохранении • проверять содержимое файла, а не заголовки • запрещать traversal-последовательности • не сохранять файлы в web-доступные директории • обрабатывать и проверять файл до сохранения
Важно: ни одна проверка по отдельности не спасает. Работает только комбинация.
Вывод
File Upload - это не «про картинки». Это про доверие к данным, которые полностью контролирует пользователь.
Если пользователь может загрузить файл - он уже потенциально влияет на сервер.
Именно поэтому такие уязвимости до сих пор стабильно попадают в топы OWASP.
Продолжение следует 👉 Часть 9: условия гонки
#кибербезопасность #websecurity #pentest #fileupload #appsec #infosec #обучение #безопасность
· 26.01
Недавно тоже делал file upload, точнее directory upload. Сервис хостинга статических сайтов. На сервере сохраняю директорию в том же виде, с проверкой на path traversal. Файлы раздаются со статического сервера без возможности исполнения. Мне кажется, что все хорошо должно быть, или я ошибаюсь? )
ответить
коммент удалён