
Exploit para Apache Struts CVE-2017-9805, uma vulnerabilidade de execução remota de código no plugin REST. Permite testes de penetração e avaliação de segurança de aplicações web Java baseadas em Struts.
O framework web Apache Struts é uma solução gratuita e de código aberto para criar aplicações web Java.
As aplicações web diferem dos sites convencionais porque as aplicações web podem criar uma resposta dinâmica. Muitos sites entregam apenas páginas estáticas. Uma aplicação web pode interagir com bancos de dados e mecanismos de lógica de negócios para personalizar uma resposta.
Aplicações web baseadas em JavaServer Pages às vezes misturam código de banco de dados, código de design de página e código de fluxo de controle. Na prática, descobrimos que, a menos que essas preocupações sejam separadas, aplicações maiores se tornam difíceis de manter.
Uma maneira de separar as preocupações em uma aplicação de software é usar uma arquitetura Model-View-Controller (MVC). O Model representa o código de negócios ou banco de dados, a View representa o código de design da página e o Controller representa o código de navegação. O framework Struts foi projetado para ajudar desenvolvedores a criar aplicações web que utilizam uma arquitetura MVC.
O framework fornece três componentes principais:
A arquitetura e as tags do framework estão em conformidade com os termos da moda. Struts funciona bem com aplicações REST convencionais e com tecnologias como SOAP e AJAX.
O Projeto Apache Struts é a comunidade de código aberto que cria e mantém o framework Apache Struts. O projeto consiste em um grupo diversificado de voluntários que compartilham valores comuns em relação ao desenvolvimento colaborativo de código aberto baseado em comunidade. O Projeto Apache Struts tem orgulho de compartilhar esses valores com nossa organização controladora: The Apache Software Foundation.
O projeto é chamado “Struts” porque o framework tem a intenção de fornecer as “fundações invisíveis” que suportam o desenvolvimento profissional de aplicações. Struts fornece a cola que une os vários elementos da plataforma Java padrão em um todo coerente. Nosso objetivo é alavancar padrões existentes produzindo as peças ausentes que precisamos para criar aplicações de nível empresarial que sejam fáceis de manter ao longo do tempo.
O Projeto Apache Struts ofereceu duas versões principais do framework Struts. Atualmente, estamos mantendo apenas a versão Struts 2. Recomenda-se atualizar todas as aplicações Struts 1.x para Struts 2. Por favor, não inicie o desenvolvimento de novas aplicações usando Struts 1.x, pois não estamos mais emitindo patches de segurança.
Struts 2 era originalmente conhecido como WebWork 2. Após trabalhar de forma independente por vários anos, as comunidades WebWork e Struts uniram forças para criar o Struts 2. O framework 2.x é a melhor escolha para equipes que valorizam soluções elegantes para problemas difíceis.
Apache Struts é um framework web moderno, mantido e completo. Ele existe há anos e, dada a enorme base de usuários, é improvável que desapareça tão cedo no futuro. Não só isso, temos usuários e desenvolvedores dedicados no projeto. Apache Struts é licenciado sob a Apache License 2.0 e isso não mudará. Mantemos uma propriedade intelectual limpa e você está “seguro” para usar o projeto. Às vezes você não está “seguro” para usar um projeto quando uma empresa controla o SCM. O acesso ao código-fonte não significa que é gratuito. Com Apache Struts, você não está apenas livre para “fazer o que quiser com ele”, você pode até contribuir (o que nem sempre é o caso). E o melhor: você também pode se tornar parte da equipe principal.
Geralmente é muito fácil integrar outras tecnologias com Apache Struts. Se você está usando um ORM como Apache Cayenne, Hibernate ou JDBC, não terá nenhuma restrição. Apache Struts nem está muito vinculado a uma tecnologia de frontend. Antigamente era JSP, depois vieram Velocity e Freemarker. Hoje em dia você pode construir sua aplicação web apenas com HTML estático e AngularJS. Ou você quer usar Sitemesh ou Tiles. Tudo isso não é problema devido aos mecanismos de extensão elegantes e fáceis de usar do Struts.
Ao contrário de outros frameworks orientados a componentes, não pretendemos ocultar a natureza sem estado da web. Achamos perfeitamente aceitável construir sobre um ciclo de Requisição/Resposta. Também achamos que o padrão MVC não é tão ruim, só porque é antigo. Na verdade, acreditamos que a arquitetura do Apache Struts é limpa e fácil de entender.
Claro, se você deseja construir componentes no lado do servidor que renderizam no lado do frontend, você provavelmente está errado com Struts. Esta é uma abordagem diferente que promete reduzir a quantidade de conhecimento em HTML/JavaScript necessária e criar componentes reutilizáveis para a camada de visão. Projetos como Wicket e Tapestry servem muito bem para esse propósito. Como em todo framework, você precisa decidir se faz sentido para você construir componentes ou se é melhor com a abordagem Struts.