CVE-2017-5638: RCE no Apache Struts 2 via Content-Type, verificar e corrigir
Última atualização:
No Apache Struts 2, o parser multipart Jakarta monta a mensagem de erro a partir do cabeçalho Content-Type de um upload que falhou e a avalia como OGNL. Um atacante envia uma requisição com uma expressão OGNL nesse cabeçalho e executa comandos no servidor, sem login.
Ela foi explorada ativamente a partir de março de 2017 e usada em grandes vazamentos de dados. Aplicações Struts antigas ainda rodam em muitas empresas, por isso os scans continuam.
Em resumo
- CVE
- CVE-2017-5638
- Software
- Apache Struts 2
- Versões afetadas
- 2.3.5 a 2.3.31, 2.5 a 2.5.10
- Corrigida em
- 2.3.32, 2.5.10.1
- 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
- 11 de março de 2017
- Patch virtual do InfraFence
vp-cve-2017-5638(ModSecurity id 9920007)
O que é afetado
Segundo o boletim S2-045 do Apache: Struts 2.3.5 a 2.3.31 e 2.5 a 2.5.10, com o parser multipart Jakarta padrão. O Struts é uma biblioteca dentro de aplicações web Java (struts2-core-*.jar), não um pacote do sistema.
Verificar se um servidor o tem
Procure a biblioteca e as aplicações que a incluem; a versão está no nome:
sudo nice -n 19 ionice -c3 find / -xdev -type f -name 'struts2-core-*.jar' 2>/dev/nullsudo nice -n 19 ionice -c3 find / -xdev -type f \( -name '*.war' -o -name '*.ear' \) 2>/dev/null \
| while read -r f; do
unzip -l "$f" 2>/dev/null | grep -oE 'struts2-core-[0-9][^/ ]*\.jar' | sed "s|^|$f: |"
doneCorrigir
- Atualize o Struts para no mínimo 2.3.32 ou 2.5.10.1, as versões que a corrigiram. As duas linhas estão sem suporte há muito tempo: planeje a migração para uma versão do Struts com suporte, que também fecha as vulnerabilidades posteriores.
- Recompile e faça o deploy da aplicação de novo, depois reinicie-a.
- Se não puder atualizar na hora, o boletim do Apache traz duas soluções alternativas: um filtro de servlet que rejeita requisições cujo
Content-Typenão seja ummultipart/form-datasimples, ou a troca para outro parser multipart.
Atenção: Uma aplicação que rodou um Struts vulnerável na internet pode ter sido comprometida anos atrás: procure contas desconhecidas, tarefas agendadas e web shells.
Como o InfraFence a bloqueia enquanto você atualiza
O patch virtual para a CVE-2017-5638 é uma regra ModSecurity sobre o cabeçalho de requisição Content-Type: ele bloqueia um cabeçalho que contenha %{ ou ${, o início de uma expressão OGNL. Um Content-Type legítimo nunca contém nenhum dos dois.
Nota: O mesmo bug também pode ser alcançado pelos cabeçalhos Content-Disposition e Content-Length de um upload (a CVE-2017-5638 os abrange; o S2-046 do Apache os descreve). O patch verifica só o Content-Type, a forma explorada ativamente. O upgrade cobre todos eles.
Como o patch é aplicado
- O agente anota quais portas SSH e quais sites respondem.
- Ele grava a regra (id ModSecurity 9920007) 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-2017-5638 (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.
