CVE-2018-14667
Priorize a correção. Ela está sob exploração confirmada pelo CISA e tem prova de conceito pública.
Apply mitigations per vendor instructions or discontinue use of the product if mitigations are unavailable.
Resumo
CVE-2018-14667 é uma falha de injeção de Expression Language (EL) no componente UserResource do RichFaces 3.x, framework de componentes JSF hoje sem suporte da comunidade. Um atacante não autenticado envia um objeto Java serializado malicioso que, ao ser processado pelo resource handler, tem campos avaliados como EL, resultando em execução remota de código no servidor de aplicação. Está no catálogo KEV da CISA com exploração confirmada e existe ferramenta de exploração pública (Richsploit), o que torna o risco real e não apenas teórico apesar da idade do componente.
Detalhamento técnico
A falha está na classe org.ajax4jsf.resource.UserResource$UriData, usada pelo mecanismo de resources do RichFaces 3.x para servir arquivos/recursos referenciados por componentes JSF (ex.: mediaOutput, fileUpload). O UriData é serializado, codificado e enviado ao cliente como parte da URL do recurso; no request seguinte o servidor decodifica e desserializa esse objeto para reconstituir o caminho do recurso solicitado. O problema é que campos desse objeto são posteriormente avaliados como expressões EL pelo framework, sem sanitização — classifica-se como injeção de EL (CWE-917) combinada com desserialização de dado não confiável (CWE-502), já que o vetor de entrada é um blob serializado controlado pelo atacante.
Como é explorada
O atacante monta um objeto UriData (ou usa a codificação esperada pelo endpoint UserResource) contendo uma expressão EL maliciosa nos campos que o RichFaces interpreta, encoda esse objeto como o resource resolver espera e o envia via HTTP para o endpoint de recursos exposto pela aplicação JSF. Não é necessária autenticação nem interação do usuário — a superfície é a própria requisição HTTP ao endpoint de resources, que costuma estar publicamente acessível em qualquer aplicação que use RichFaces 3.x. Como a avaliação EL no RichFaces 3.x roda com plenos privilégios do contexto do servidor de aplicação, uma exploração bem-sucedida entrega execução arbitrária de código no processo do servidor (JBoss/Tomcat/etc.), não apenas leitura de dados ou negação de serviço.
Versões
Como se proteger
A linha RichFaces 3.x está fora de manutenção pela comunidade desde antes de 2018; não há release 'corrigida' da própria comunidade além do que a Red Hat empacotou para seus produtos. Quem usa JBoss EAP 5.2.0, JBoss SOA Platform 5.3.1 ou JBoss BRMS 5.3.1 (standalone) deve aplicar os patches específicos de RichFaces distribuídos via RHSA-2018:3517/3518 (EAP), RHSA-2018:3519 (SOA Platform) e RHSA-2018:3581 (BRMS), que atualizam o pacote richfaces para as builds 3.3.1-6.SP3_patch_03 (RHEL6) e 3.3.1-9.SP3_patch_03 (RHEL5) — restart do processo JBoss é necessário para o patch surtir efeito.
Como detectar
Procurar requisições HTTP ao endpoint de resources do RichFaces (padrões de path/resource servlet associados a org.ajax4jsf/UserResource) contendo parâmetros longos codificados (base64) que decodifiquem para dados binários com assinatura de stream Java serializado (bytes 0xAC 0xED no início do payload decodificado) — sinal forte de tentativa de exploração via objeto serializado malicioso. Não há um único indicador confiável e universal porque o endpoint e a codificação variam por versão/configuração da aplicação; ausência de logs de aplicação detalhados no nível de resource servlet dificulta a detecção retroativa, e a existência da ferramenta pública Richsploit facilita varreduras automatizadas que podem não deixar rastro distinto de tráfego HTTP legítimo do próprio framework.