CVE-2006-1547
Priorize a correção. Ela está sob exploração confirmada pelo CISA.
Apply updates per vendor instructions.
Resumo
Falha de negação de serviço no ActionForm do Apache Struts 1, anterior à versão 1.2.9, quando combinado com Commons BeanUtils 1.7. Um atacante remoto e não autenticado envia um formulário multipart/form-data com um nome de parâmetro que referencia o getter público getMultipartRequestHandler, alcançando propriedades internas do CommonsMultipartRequestHandler e do próprio BeanUtils. O CVSS 7.5 reflete só impacto em disponibilidade (sem leitura ou escrita de dados) — é relevante hoje quase exclusivamente porque está no catálogo KEV da CISA, ou seja, há exploração confirmada em ambientes que ainda rodam Struts 1 legado.
Detalhamento técnico
O ActionForm do Struts 1 expõe publicamente o método getMultipartRequestHandler(), usado internamente para tratar uploads via multipart/form-data. O populador de formulários do Struts usa Commons BeanUtils para mapear nomes de parâmetros HTTP em propriedades de bean via reflexão, inclusive suportando notação de propriedade aninhada (nested property, tipo 'a.b.c'). Como o getter é público, um nome de parâmetro malicioso consegue atravessar essa cadeia e chegar a elementos internos do CommonsMultipartRequestHandler e do BeanUtils que não deveriam ser alcançáveis via input externo.
O problema de fundo é a falta de restrição sobre quais propriedades de bean podem ser navegadas por nomes de parâmetro vindos de fora — o padrão que mais tarde seria formalizado em falhas maiores de manipulação de ClassLoader em Struts/BeanUtils (o caso mais conhecido é o CVE-2014-0114, que explora mecanismo semelhante de acesso a propriedades expostas via getters públicos). Aqui, o resultado documentado é mais limitado: o acesso indevido gera condição de erro/exceção ou consumo anômalo de recursos no processamento do multipart, resultando em negação de serviço em vez de execução de código ou leitura de dados.
O atacante controla o conteúdo do nome do campo do formulário multipart — não o payload de dados em si, mas a chave/nome do parâmetro, que é interpretada como caminho de propriedade pelo BeanUtils. Isso caracteriza uma falha de validação de entrada aplicada a metadados estruturais da requisição, não ao valor do campo.
Como é explorada
O vetor é uma requisição HTTP POST com corpo multipart/form-data, direcionada a qualquer endpoint da aplicação Struts 1 que processe ActionForm com suporte a upload de arquivos (ou seja, que use o CommonsMultipartRequestHandler). Não é necessária autenticação, interação do usuário nem configuração fora do padrão além de a aplicação aceitar uploads multipart — condição bastante comum em aplicações Struts 1 com formulários de envio de arquivo.
A complexidade de exploração é baixa (AC:L): o atacante monta o nome do campo do formulário para referenciar o getter exposto e, através dele, alcança propriedades que desencadeiam erro ou consumo excessivo durante o parsing/binding do request. O resultado final é indisponibilidade do processamento da requisição ou do serviço afetado — não há divulgação de dados nem execução remota de código documentada nesta CVE.
O fato de estar no catálogo KEV da CISA (adicionada em 2022-01-21) indica exploração confirmada em ambientes reais, mais de quinze anos após a publicação original — consistente com o padrão de instâncias Struts 1 legadas e sem manutenção ainda expostas na internet, já que o projeto Struts 1 está descontinuado pela ASF.
Versões
Como se proteger
A correção do fornecedor é atualizar para Apache Struts 1.2.9 ou versão posterior, conforme as notas de release do projeto. Isso resolve o problema de acesso via getter público combinado com BeanUtils 1.7.
Se a atualização não for viável — cenário comum, dado que Struts 1 está em fim de vida e sem suporte oficial da ASF —, o controle compensatório realista é reduzir a superfície de ataque: desabilitar ou restringir endpoints que aceitam multipart/form-data quando não há necessidade funcional de upload, e inspecionar/bloquear em WAF ou proxy reverso requisições cujos nomes de campo de formulário contenham padrões de propriedade aninhada em Java (pontos, parênteses ou referências a métodos como 'multipartRequestHandler'). Esse filtro reduz risco mas não elimina a classe de falha, porque a lógica de binding do BeanUtils continua exposta.
Não funciona como mitigação apenas trocar o handler de sessão, aumentar timeouts ou tratar exceções genericamente na aplicação — isso pode reduzir o impacto de uma exploração isolada, mas não remove a causa raiz, que está na combinação Struts+BeanUtils vulnerável. Dado que o framework está descontinuado, a mitigação estrutural de longo prazo é a migração para um framework mantido, fora do escopo desta página.
Como detectar
Não há assinatura pública consolidada e amplamente divulgada para esta CVE especificamente. Como indício, vale monitorar logs de aplicação por exceções ou erros de binding lançados pelo BeanUtils/PropertyUtils durante o processamento de requisições multipart/form-data, e inspecionar nomes de campo de formulário anômalos que contenham referências a métodos (como padrões do tipo 'multipartRequestHandler' seguidos de notação de propriedade aninhada) em vez de nomes de campo legítimos da aplicação.
Na ausência de log de erro correlato, picos de latência ou falhas de processamento concentrados em endpoints de upload multipart em aplicações Struts 1 antigas são o sinal indireto mais prático disponível.