Fique por dentro

Destrinchando o CVE-2017-5638: Apache Struts

© Propriedade Intelectual de 4Tech Tecnologia Ltda. Todos os direitos reservados.

Hoje em dia existem toneladas de frameworks que facilitam o desenvolvimento de aplicações web. Esses frameworks vem empacotados com vários componentes para ajudar ainda mais o desenvolvimento.

O problema é que o framework e seus componentes devem ser constantemente atualizados. Fazer isso em aplicações distribuídas e arquiteturas legados pode ser uma grande dor de cabeça. Principalmente em situações onde breaking changes podem ser introduzidas, qunado pode ser necessário refazer o código.

Infelizmente é inevitável a necessidade da atualização desses serviços e componentes.

Mais uma prova disso é a vulnerabilidade no componente Jakarta do Apache Struts, um framework web modelo MVC para Java.

Vulnerabilidade

O problema é que no componente, quando uma requisição HTTP possui um header Content-Type inesperado, uma exceção ocorre e ao construir a mensagem da exceção o

componente utiliza a função LocalizedTextUtil.findText para construir a string do erro. Que por sua vez inclui o conteúdo do cabeçalho Content-Type.

O grande ponto é que a função usada para construir a string também interpreta expressões OGNL (Object Graph Navigation Library), uma linguagem extensiva por si só que conta com uma variedade de funções core do Java, incluindo a java.core.ProcessBuilder(), que permite a criação de um novo processo externo.

Resumindo, a vulnerabilidade permite trivialmente a um atacante injetar código arbitrário remotamente, garantindo até controle total do servidor que recebe a requisição HTTP, fazendo dessa vulnerabilidade além de devastadora, muito popular.

Solução

Existem vários métodos para mitigar esse tipo de vulnerabilidade. O melhor e mais eficiente é atualizar o framework e todos os seus componentes para sua versão mais estável.

Isso não só resolveria o problema como melhoraria a eficiência geral da aplicação, sob ponto de vista de segurança, desempenho e robustez.

Ainda assim existem outros meios para mitigar a falha. Um proxy (como o NGINX) pode ser usado para sanitizar o cabeçalho. Outra opção seria codificar um proxy para o mesmo propósito.

Existe também uma opção menos eficiente, mas altamente eficaz, pelo baixo esforço. A contratação de um serviço de proteção como o CloudFlare, Silveline ou Incapsula,  que sanitizariam as requisições antes de encaminhar para o servidor de aplicação/gateway independente da arquitetura e situação atual dos servidores.

Se após a leitura desse artigo você ainda tem dúvidas, basta encaminhar um email para contato@4tech.digital , ou acessar Contato em nossa página (www.4tech.digital) a sessão Fale Conosco, que produziremos mais conteúdo cobrindo suas dúvidas ou lhe respondendo diretamente.