![Apache - 如何限制 Content-Type 标头长度以避免 CVE-2014-0050?](https://linux22.com/image/626350/Apache%20-%20%E5%A6%82%E4%BD%95%E9%99%90%E5%88%B6%20Content-Type%20%E6%A0%87%E5%A4%B4%E9%95%BF%E5%BA%A6%E4%BB%A5%E9%81%BF%E5%85%8D%20CVE-2014-0050%EF%BC%9F.png)
周四拒绝服务问题雄猫在 Tomcat 邮件列表中发布(“[安全]CVE-2014-0050Apache Commons FileUpload 和 Apache Tomcat DoS”)。
content-type
据我第一眼看到的消息,攻击者似乎可以通过在上传文件时发送过长的标头来导致无限循环(如果在 Web 应用程序中使用了 Servlet 3.0+ 上传功能)。
如果有人在 Apache httpd 服务器后面运行 Tomcat 服务器(使用 AJP 和 mod_jk),那么可以做些什么来实施该建议“将 Content-Type 标头的大小限制为小于 4091 字节”?
当然,一旦有错误修复版本可用(通过下载页面或 Linux 发行版特定的软件包存储库),就应该更新。毫无疑问。但目前当前可用的 Tomcat 版本 7.0.50似乎仍受到影响。
但是在修复版本发布之前,可以采取什么快速防御措施呢?
(无需...
- 卸载当前的 Tomcat 包(从包存储库安装),
- 从源代码(SVN)手动构建版本,
- 手动部署(不使用
apt-get
或aptitude
), - 稍后再次卸载所有手动构建的内容,以便从软件包存储库轻松更新版本)
是否有与该主题的临时解决方法类似的方法:http://wiki.apache.org/httpd/CVE-2011-3192?
那时人们可以使用mod_headers,mod_setenvif或者mod_rewrite来处理这个问题。是否有类似的 Apache httpd 技巧来防止格式错误的多部分上传请求远离下游 Tomcat 服务器?
答案1
apache(包括 Shane 的修改版本;阅读请求函数我不会打赌的长度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;
}
...
}
答案2
是的,应该可以。CVE 公告说 4091 字节,但意外泄露电子邮件似乎开发人员倾向于将 70-128 字节作为限制。我们以 128 字节为限,但可以根据需要进行调整:
SetEnvIf Content-Type ^.{129,}$ bad-content-type=1
RequestHeader unset Content-Type env=bad-content-type
仅取消设置标头(而不是完全 403 请求)可能对明显的攻击请求过于温和,但这应该可以完成工作。