Автоматическая загрузка и извлечение архива (zip, rar, targz, tarbz) – проблема безопасности?
Вопрос
Я хотел бы создать следующие функции для моего веб-приложения:
- пользователь загружает архивный файл (zip/rar/tar.gz/tar.bz и т. д.) (содержимое — несколько файлов изображений)
- архив автоматически извлекается после загрузки
- изображения отображаются в списке HTML (что угодно)
Есть ли какие-либо проблемы безопасности, связанные с процессом извлечения?Например.возможность выполнения вредоносного кода, содержащегося в загруженных файлах (или в подготовленном архивном файле), или еще?
Решение
Помимо возможности использования системы с такими вещами, как переполнение буфера, если это не реализовано должным образом, могут возникнуть проблемы, если вы слепо извлекаете хорошо созданный сжатый файл с большим файлом с избыточными шаблонами внутри (zip-бомба).Сжатая версия очень мала, но при извлечении она займет весь диск, что приведет к отказу в обслуживании и, возможно, к сбою системы.
Кроме того, если вы не будете достаточно осторожны, клиент может передать zip-файл с исполняемым на стороне сервера содержимым (.php
, .asp
, .aspx
, ...) внутри и запросить файл по HTTP, что, если не настроено должным образом, может привести к выполнению произвольного кода на сервере.
Другие советы
В дополнение к ответу Медрдада:Размещать пользовательский контент немного сложнее.Если вы размещаете zip-файл, то его можно использовать для хранения файлов классов Java (также используемых для других форматов), и, следовательно, «политика одного и того же происхождения» может быть нарушена.(Была атака GIFAR, когда zip-архив был прикреплен к концу другого файла, но это больше не работает с Java PlugIn/WebStart.) Файлы изображений следует, по крайней мере, проверять на то, что они действительно являются файлами изображений.Очевидно, что существует проблема с веб-браузерами, имеющими уязвимости переполнения буфера, и теперь ваш сайт может быть использован для атаки на ваших посетителей (это может сделать вас непопулярным).Вы можете найти какое-то клиентское программное обеспечение, использующее, скажем, регулярные выражения для передачи данных, поэтому можно выполнить данные в середине файла изображения.Zip-файлы могут иметь неприличные имена (например, обход каталога с помощью ../
и странные персонажи).
Что делать (не обязательно исчерпывающий список):
- Файлы, предоставленные пользователем хоста, находятся в совершенно другом домене.
- Домен с файлами пользователя должен использовать разные IP-адреса.
- Если возможно, декодируйте и перекодируйте данные.
- Есть еще один вопрос о переполнении стека по zip-бомбам - я предлагаю распаковать с помощью
ZipInputStream
и останавливаемся, если он становится слишком большим. - Если нативный код касается пользовательских данных, делайте это в тюрьме chroot.
- Символы белого списка или полная замена имен файлов.
- Потенциально вы могли бы использовать какой-либо IDS для сканирования подозрительных данных (я действительно не знаю, насколько это делается — убедитесь, что ваш IDS не написан на C!).