В четверг DoS проблема с Кот было объявлено в списке рассылки Tomcat ("[БЕЗОПАСНОСТЬ] CVE-2014-0050 Apache Commons FileUpload и Apache Tomcat DoS ").
Похоже, что злоумышленник может вызвать бесконечный цикл, отправив слишком длинный content-type
заголовок при загрузке файлов (если в веб-приложении используется возможность загрузки Servlet 3.0+), насколько я понял сообщение с первого взгляда.
Если кто-то управляет своими серверами Tomcat за серверами Apache httpd (с использованием AJP и mod_jk), что можно сделать для реализации рекомендации? «Ограничьте размер заголовка Content-Type до менее 4091 байта»?
Конечно, как только выпуск с исправлением ошибок доступен (на странице загрузки или в репозиториях пакетов для конкретных дистрибутивов Linux), следует выполнить обновление. Нет вопросов. Но на данный момент в настоящее время доступна версия Tomcat 7.0.50 похоже, все еще пострадает.
Но что можно сделать в качестве быстрой меры защиты, пока не будет доступен фиксированный выпуск?
(Без необходимости ...
apt-get
или aptitude
),Есть ли способы, похожие на временные обходные пути для этой темы: http://wiki.apache.org/httpd/CVE-2011-3192 ?
Тогда можно было использовать mod_headers, mod_setenvif или mod_rewrite разобраться с проблемой. Существуют ли аналогичные уловки Apache httpd для сохранения искаженного составной загружать запросы от подчиненного сервера Tomcat?
Да, это должно сработать. В объявлении CVE указано 4091 байт, но случайное раскрытие электронная почта кажется, что разработчики склоняются к 70-128 байтам в качестве ограничения. Пойдем со 128, но можно настроить по мере необходимости:
SetEnvIf Content-Type ^.{129,}$ bad-content-type=1
RequestHeader unset Content-Type env=bad-content-type
Простое отключение заголовка (вместо полного отключения запроса 403), вероятно, излишне мягко с очевидными запросами на атаку, но это должно сработать.
apache (включая модифицированную версию от Шейна; чтение и т.д я бы не стал ставить на длину Content-String
всегда <129
RewriteEngine On
RewriteCond %{HTTP:Content-Type} "multipart\/form-data;(\s*)boundary=[a-zA-Z0-9_-]{3000}"
RewriteRule ^/(.*)$ /405.html [R=301,L]
# modified
SetEnvIf Content-Type ^.{3000,}$ bad-content-type=1
RequestHeader unset Content-Type env=bad-content-type
nginx (не нашел способа обойти if ())
server {
...
if ($http_content_type ~* "multipart\/form-data;(\s*)boundary=[a-zA-Z0-9_-]{3000}" ) {
return 403;
}
...
}