InfraFenceInfraFence

Live Security Operations

Começar

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:

Qualquer distribuição Linux
sudo nice -n 19 ionice -c3 find / -xdev -type f -name 'struts2-core-*.jar' 2>/dev/null
Qualquer distribuição Linux (precisa do unzip)
sudo 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: |"
    done

Corrigir

  1. 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.
  2. Recompile e faça o deploy da aplicação de novo, depois reinicie-a.
  3. 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-Type não seja um multipart/form-data simples, 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

  1. O agente anota quais portas SSH e quais sites respondem.
  2. Ele grava a regra (id ModSecurity 9920007) entre os próprios marcadores no seu arquivo ModSecurity, executa apachectl configtest e recarrega o Apache de forma suave. Se o teste falhar, o arquivo anterior volta ao lugar.
  3. Ele verifica se o SSH e os sites ainda respondem, e remove o patch se não responderem.
  4. Ele verifica se o ModSecurity realmente bloqueia com a regra, com uma requisição de teste local inofensiva. Um ModSecurity em DetectionOnly só 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.