CVE-2021-41773: path traversal no Apache 2.4.49, verificar e corrigir
Última atualização:
O Apache HTTP Server 2.4.49 mudou a forma de normalizar caminhos, e a mudança deixou passar um ponto codificado (%2e). Uma requisição com segmentos .%2e/ no caminho podia então alcançar arquivos fora das pastas que a configuração mapeia. Com CGI ativado numa dessas pastas, o mesmo truque executa programas no servidor.
Só a versão 2.4.49 é afetada. A correção dela, a 2.4.50, também era incompleta (CVE-2021-42013), então a versão a usar é a 2.4.51 ou posterior.
Em resumo
- CVE
- CVE-2021-41773
- Software
- Apache HTTP Server
- Versões afetadas
- Só 2.4.49
- Corrigida em
- 2.4.50 (incompleta, veja CVE-2021-42013); atualize para 2.4.51 ou posterior
- Pontuação CVSS
- 9.8 Crítica (NVD, CVSS 3.1) ·
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - CISA Known Exploited Vulnerabilities
- Sim, adicionada em 3 de novembro de 2021
- Publicada pelo NVD
- 5 de outubro de 2021
- Patch virtual do InfraFence
vp-cve-2021-41773(ModSecurity id 9920001)
O que é afetado
O Apache 2.4.49 foi a versão atual por cerca de três semanas, em setembro e outubro de 2021. Hoje ele aparece principalmente em servidores compilados a partir do código-fonte, em imagens de contêiner daquela época ou em sistemas que não foram atualizados desde então. A exposição de arquivos só funciona onde os arquivos fora das pastas mapeadas não estão protegidos pelo Require all denied padrão em <Directory />; a execução de código também precisa de CGI (mod_cgi ou mod_cgid) numa pasta com alias.
Verificar se um servidor está vulnerável
Verifique primeiro a versão:
apache2 -vhttpd -v/usr/local/apache2/bin/httpd -vQualquer coisa diferente de Apache/2.4.49 ou Apache/2.4.50 não é afetada por esta falha. Nessas duas versões, verifique a configuração da raiz do sistema de arquivos, que precisa negar o acesso, e se algum módulo CGI está carregado:
sudo grep -rn -A3 '<Directory />' /etc/apache2/ /etc/httpd/ /usr/local/apache2/conf/ 2>/dev/nullsudo apachectl -M 2>/dev/null | grep -i cgiAs tentativas deixam pontos codificados nos logs de acesso:
sudo grep -rhiE '\.%2e/|%2e\./|%2e%2e/|%%32%65|\.%%32' --include='*access*' --exclude='*.gz' /var/log/apache2 /var/log/httpd 2>/dev/null | tail -20Corrigir
Atualize para a 2.4.51 ou posterior. Com o pacote da sua distribuição (a atualização reinicia o Apache: escolha um momento tranquilo):
sudo apt-get update
sudo apt-get install --only-upgrade apache2
apache2 -vsudo dnf upgrade httpd
httpd -vUm servidor compilado a partir do código-fonte precisa de um novo build da versão 2.4 atual; um contêiner precisa de uma nova imagem. Depois confira que a raiz do sistema de arquivos nega o acesso, como na configuração padrão, e recarregue:
<Directory />
AllowOverride None
Require all denied
</Directory>sudo apachectl configtest && sudo apachectl gracefulAtenção: Se os logs mostrarem requisições bem-sucedidas (status 200) com pontos codificados, trate o servidor como comprometido: arquivos como /etc/passwd ou configurações com senhas podem ter sido lidos, e com CGI um programa pode ter sido executado.
Como o InfraFence a bloqueia enquanto você atualiza
O patch virtual para a CVE-2021-41773 é uma regra ModSecurity sobre o caminho bruto da requisição, antes de o Apache decodificá-lo: ele bloqueia um caminho com um ponto codificado ao lado de um ponto (.%2e, %2e., %2e%2e) seguido de uma barra, simples ou codificada. URLs normais nunca contêm essa sequência.
Como o patch é aplicado
- O agente anota quais portas SSH e quais sites respondem.
- Ele grava a regra (id ModSecurity 9920001) entre os próprios marcadores no seu arquivo ModSecurity, executa
apachectl configteste recarrega o Apache de forma suave. Se o teste falhar, o arquivo anterior volta ao lugar. - Ele verifica se o SSH e os sites ainda respondem, e remove o patch se não responderem.
- Ele verifica se o ModSecurity realmente bloqueia com a regra, com uma requisição de teste local inofensiva. Um ModSecurity em
DetectionOnlysó registra: nesse caso, o patch é removido e reportado como ineficaz, nunca como aplicado.
Cada requisição que o patch bloqueia é reportada com CVE-2021-41773 (agente 1.0.37 ou posterior): você vê as tentativas na atividade do servidor e na página Exploração do painel, e assim sabe que a vulnerabilidade está sendo testada contra você.
Atenção: Um patch virtual bloqueia a forma conhecida do ataque nas requisições que passam pelo Apache naquele servidor. Ele não substitui a atualização: instale a versão corrigida e depois remova o patch em Atividade com Desfazer, se não precisar mais dele.
Os patches virtuais precisam do Apache com ModSecurity, da configuração Permitir alterações na configuração do servidor web e de nenhum painel de hospedagem ou ferramenta de gerenciamento de configuração controlando o servidor web; eles fazem parte do plano Pro e do AutoMode. Uma pessoa os aplica a partir da análise por IA, ou o AutoMode faz isso. Veja Patches virtuais.
Fontes
Os fatos desta página vêm destas fontes; consulte-as para ver se houve mudanças.
Teste grátis em 1 servidor
O Starter é gratuito para um servidor, com proteção completa e bloqueio automático. Sem cartão de crédito.
Instale o agente como root, com o seu token no lugar de <TOKEN>:
curl -fsSL https://github.com/infrafence/infrafence-agent/releases/latest/download/install.sh | sudo bash -s -- --token <TOKEN>O token é criado no painel, em Servidores › Adicionar servidor.
