CVE-2022-29464
Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.
Apply updates per vendor instructions.
Resumo
Falha crítica de upload de arquivo irrestrito em múltiplos produtos WSO2 (API Manager, Identity Server, Enterprise Integrator, Open Banking), descoberta por Orange Tsai, que permite RCE não autenticado. O endpoint /fileupload fica fora do fluxo de autenticação por decisão explícita de código, e um Content-Disposition com sequência de directory traversal permite gravar um arquivo (ex: JSP) dentro do webroot da aplicação, que é então executado via HTTP. Está no catálogo KEV da CISA com exploração ativa confirmada, tem exploit público e módulo Metasploit — CVSS 9.8 aqui reflete corretamente o risco, sem pré-condições que reduzam o impacto.
Detalhamento técnico
O vetor é o servlet FileUploadServlet, mapeado na rota /fileupload. No identity.xml, essa rota é declarada com secured="false" para todos os métodos HTTP. Além disso, o método handleSecurity() do Carbon delega a decisão de bloquear/permitir acesso a CarbonUILoginUtil.handleLoginPageRequest(), que verifica se a URI requisitada termina em /fileupload ou contém /fileupload/ (e não contém ";") — nesse caso retorna RETURN_TRUE e pula qualquer checagem de login, logando apenas em nível debug "Skipping security checks for". Ou seja, a rota é acessível sem sessão nem credenciais por design de duas camadas independentes de configuração.
Como é explorada
No init() do servlet, FileUploadExecutorManager carrega, a partir do carbon.xml, um mapeamento de 'Actions' para classes executoras de upload. A configuração padrão mapeia as ações 'keystore', 'certificate' e o wildcard '*' para AnyFileUploadExecutor, que não restringe tipo nem conteúdo do arquivo enviado — aceita qualquer extensão, incluindo JSP. O nome/caminho de destino do arquivo é derivado do cabeçalho Content-Disposition da requisição multipart; sem sanitização de path, um atacante insere sequências '../../../../' nesse campo para escapar do diretório de destino padrão e alcançar um diretório servido publicamente, como repository/deployment/server/webapps. O resultado é a gravação de um arquivo JSP diretamente sob o webroot, executável em seguida com uma simples requisição GET — RCE completo com privilégios do processo do servidor.
Versões
Como se proteger
Não é RCE que exija autenticação, configuração não padrão ou interação do usuário: qualquer instância exposta na rede com a interface de management/API acessível é vulnerável por padrão. Clientes com assinatura WSO2 Updates (WUM) devem aplicar o patch até o update level indicado pelo fornecedor para cada versão (ex.: API Manager 4.0.0 → update level 64; Identity Server 5.11.0 → update level 103; Enterprise Integrator 6.6.0 → update level 79 — a lista completa por versão está no advisory WSO2-2021-1738). Não existe um número de versão novo publicado para essas linhas; a correção é um patch/update level, não um release numerado — trate isso como não-mitigado se a instância não tiver sido atualizada via WUM ou patch manual.
Para usuários de código aberto sem assinatura, ou versões fora do suporte, o fornecedor indica aplicar os fixes públicos em carbon-kernel (PR#3152) e carbon-identity-framework (PR#3864), ou, como paliativo, adicionar regras de controle de acesso ao deployment.toml restringindo /fileupload por permissão — as regras variam por família de produto (grupo API Manager 3.x/4.0.0 vs. grupo Identity Server/IS-as-KM), e devem seguir exatamente o bloco publicado no advisory para a versão em uso, não uma regra genérica. Esse paliativo tem custo operacional baixo (só requer restart do servidor) mas não é substituto do patch: mitiga o vetor conhecido, não corrige a causa raiz na lógica de handleLoginPageRequest().
Como detectar
Procure em logs de acesso do servidor por requisições (tipicamente POST multipart) para caminhos contendo '/fileupload', especialmente com cabeçalho Content-Disposition trazendo sequências de traversal ('../../../') apontando para repository/deployment/server/webapps ou outro diretório servido. Verifique também arquivos .jsp (ou outra extensão executável) recém-criados nos diretórios de webapps que não correspondam a artefatos de deploy legítimos, e mensagens de log em nível debug do Carbon do tipo 'Skipping security checks for' referenciando URIs de fileupload — isso indica que a rota foi acessada sem autenticação. Não há assinatura única confiável além dessas, já que o payload em si (o conteúdo do arquivo enviado) pode variar livremente.