请求走私漏洞修复(apache)

HTTP请求走私漏洞是指攻击者利用HTTP协议头的解析不一致性,通过发送特定的恶意请求,绕过安全限制,实现攻击的一种漏洞。

Apache的修复方式主要是对HTTP头部进行统一处理,通过配置apache的服务器来解决漏洞。

具体操作步骤如下:

  1. 检查Apache的版本和配置文件

首先确认自己当前使用的Apache版本和配置文件路径。可以通过命令“httpd -v”查看Apache版本,也可以通过locatefind命令查找httpd.conf文件的路径。

  1. 修改Apache配置文件

在httpd.conf文件中,找到 标签处,加入以下代码:

RequestHeader unset Transfer-Encoding
RequestHeader unset Content-Length

该代码的作用是在请求头中删除了Transfer-Encoding和Content-Length字段。

  1. 重启Apache

保存修改后的配置文件,用“apachectl -t”检查配置文件是否有语法错误,如果没有错误则重启Apache服务。

以上就是对Apache的修复方法,通过修改配置文件来实现对 HTTP请求走私漏洞的修复。

分类讨论:通过Apache的HTTP请求头中的Transfer-Encoding和Content-Length两个请求头来漏洞的形成,而下面的代码是基于Apache前面加上一些安全插件的情况下进行的讲解修复。

  1. 漏洞分析
  • Apache httpd 直接对HTTP/1.1 的 Transfer-Encoding请求头中中的“chunked”字符码进行解析,如果请求头没有明确定义Content-Length大小,则Apache会保留直到遇到下一个请求报文;
  • 攻击者利用这个漏洞可以在HTTP请求中添加一个Transfer-Encoding头,并在数据体中添加一个Content-Length头。当Apache在开始解析请求体时,Content-Length头比Transfer-Encoding头优先级更高,这将导致问题的出现;
  • 攻击者可以绕过HTTP谓语完整性校验和检查。
  1. 修复漏洞
    至于如何对上述漏洞进行修补,我们可以根据Apache的一些常用插件来实现。下面,我们将分别介绍一些针对性的修复方案。
  • Apache + mod_headers
LoadModule headers_module modules/mod_headers.so
 

Header set Transfer-Encoding ""
Header unset Transfer-Encoding
RequestHeader unset Transfer-Encoding
Header set Content-Length ""
Header unset Content-Length
RequestHeader unset Content-Length

上述代码的作用就是通过Apache + mod_headers来进行修复,主要把 Transfer-Encoding 和 Content-Length 相应地设置到空和content-length。接着,再使用Header和Header unset指令警告安全问题。

  • Apache + mod_rewrite
LoadModule rewrite_module modules/mod_rewrite.so
 
<Location />
RewriteEngine On
RewriteCond %{HTTP:Transfer-Encoding} chunked
RewriteCond %{HTTP:Content-Length} !^([0-9]+)$
RewriteRule .* - [F]
</Location>

上述代码的作用就是通过 Apache + mod_rewrite 进行修复,并对请求头进行限制。如果请求头中 Transfer-Encoding 字段的值为 chunked,而Content-Length 头又为空,那么会将访问请求直接禁止。

通过上述两种修复方式,可以有效防止HTTP请求走私漏洞的攻击。

你可能感兴趣的:(漏洞修复,apache)