漏洞概述

2021年10月5日,Apache官方发布了一批漏洞信息,其中Apache HTTP Server路径穿越漏洞CVE-2021-41773引起了我们的注意:

CVE-2021-41773

https://httpd.apache.org/security/vulnerabilities_24.html

漏洞在v2.4.50版本中进行了修复,并且只影响该版本。从Apache官方声明来看,攻击者可以使用路径遍历攻击将URL映射到预期文档根以外的文件。如果文档根目录以外的文件不受`require all denied`保护,则攻击者可以访问这些文件。

漏洞分析

下面着手分析一下这个漏洞的成因,直接看源代码可能很难找到漏洞位置,这里通过二进制补丁对比来找到关键函数,可以看到发生变化的函数不多,就下面几个:

容易定位到函数`ap_normalize_path`,其增加了一段判断:

补丁前的代码:

补丁后的代码(增加了对`%2e`进行了处理):

看反汇编有点晕,直接定位到源代码就非常清楚了,在老版本中只处理了`/xx/../`这样的路径,而没有正确处理`/xx/.%2e/`,导致`%2e`被带入后续的处理,发生目录穿越。

v2.4.49版本的源代码:

v2.4.50版本中新增的代码:

漏洞复现

理解漏洞原理之后,复现漏洞就很简单了。

后记

这个漏洞是一个非常典型的目录穿越漏洞,发生在Apache这样应用广泛的服务端软件中实在令人匪夷所思。因此我们继续看了httpd更早期的版本,发现在早期版本中并没有`ap_normalize_path`这个函数,该函数是在v2.4.49版本中引入的。该案例告诉我们:新功能的引入可能会带来不确定的安全隐患。

参考

https://httpd.apache.org/security/vulnerabilities_24.html

https://dlcdn.apache.org/httpd/CHANGES_2.4.50

由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。

声明:本文来自且听安全,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。