Я создаю приложение ASP.NET, развернутое в IIS, и я активно работаю над выполнением необходимых шагов, чтобы включить поддержку для Content-Encoding: gzip
В настоящее время нет планов по развертыванию сервера, над которым я работаю, в общедоступной сети, но я хотел бы хотя бы изучить варианты смягчения атак ZipBomb на моем сервере. Если мой клиент примет решение сделать свое приложение доступным для своих пользователей через общедоступные каналы, я бы хотел, чтобы мои утки уже были подряд.
Если бы я смог выяснить, как заставить тела GZ POST проходить через IIS (активный элемент в SO, связанный с этим), каковы были бы мои варианты определения размера несжатого содержимого без распаковки файла?
В качестве иллюстрации: если кто-то отправит 42 на мой сервер, распаковка содержимого приведет к взрыву бомбы. Существуют ли какие-либо варианты, чтобы определить, что «эти» 42 КБ представляют 4,5 ПБ данных, и отклонить их?
Как программно определить, что заархивированный контент разложен по слоям, без взрыва бомбы и без потоковой передачи контента в буфер фиксированного размера?
(То есть: есть ли какая-либо утилита, услуга или методология, которые можно применить в целом для проверки содержимого zip-файла, не открывая его на самом деле?)
Формат ZIP определяет как сжатые и без сжатия размер файла. Анализируя эти заголовки, вы сможете извлечь необходимую информацию.
Посмотреть Вот для получения дополнительной информации о заголовках ZIP.
Помимо обнаружения, указанного в других ответах, вы можете смягчить воздействие, принудительно разархивировав определенный раздел, который не критичен для работы вашего сервера (т.е. не раздел /, не / tmp и т. Д.).
Вы даже можете сделать это динамически, например: создать (в еще одном разделе) файл размером 2 ГБ, отформатировать его (mkfs и т. Д.) И смонтировать его в соответствующей точке монтирования (например: в конкретном подкаталоге в домашнем каталоге пользователя?) и распаковка (включая любые файлы tmp) происходит в этом вновь смонтированном каталоге. затем переместите сжатые файлы, отключите этот раздел и «переработайте» файл размером 2 ГБ.
Есть несколько способов смягчить воздействие и гарантировать, что zipbomb не станет слишком большим (он не сможет превысить размер раздела)