TIBCO JasperReports Server Information Disclosure Vulnerability
Prioriza la corrección. Ella está bajo explotación confirmada por CISA y tiene prueba de concepto pública.
Apply updates per vendor instructions.
Resumen
Falha de directory traversal (CWE-22) nos web flows Spring do TIBCO JasperReports Server que permite a qualquer usuário autenticado — independente do nível de permissão — ler arquivos arbitrários dentro da estrutura WEB-INF da aplicação, incluindo arquivos de configuração com credenciais de banco de dados. O CVSS 7.7 reflete bem o risco: não precisa de privilégio administrativo, só de uma conta válida qualquer, e o impacto de confidencialidade é alto porque expõe segredos que viabilizam movimento lateral.
Detalle técnico
O componente vulnerável é o mecanismo de resolução de páginas dos web flows do Spring usados pelo JasperReports Server (endpoint flow.html, parâmetro _flowId=sampleFlow combinado com o parâmetro page). O valor de page é lido via getParameterValues() e passado sem sanitização até getResource() em DirResourceSet.java, que monta um objeto File concatenando o caminho base da webapp (ex: .../tomcat/webapps/jasperserver/WEB-INF/) com o valor controlado pelo atacante. Como não há validação contra sequências '../', é possível sair do diretório esperado (jsp/modules/...) e alcançar qualquer arquivo dentro da estrutura da aplicação.
O atacante controla o parâmetro page por completo, incluindo o número de '../' usados para subir na árvore de diretórios. A aplicação normalmente apenda '.jsp' ao valor de page antes de resolver o arquivo — os pesquisadores da Rhino Security Labs descobriram que um ponto e vírgula (;) ao final do caminho engana o parser Java e faz a extensão '.jsp' ser ignorada, permitindo ler arquivos de configuração como js.jdbc.properties (que contém credenciais de conexão ao banco) mesmo sem controle sobre a extensão de destino. Bytes nulos (%00), a técnica clássica de truncamento, não funcionam nesse caso.
A falha também permite bypass de controle de acesso: um usuário de baixo privilégio (ex: joeuser) consegue, via o mesmo parâmetro page, invocar JSPs administrativos como adminImport ou awsConfiguration que deveriam estar restritos a administradores, simplesmente apontando o traversal para o caminho desses recursos dentro de WEB-INF/jsp/modules/administer/.
Cómo se explota
Pré-requisito real: autenticação válida na aplicação, com qualquer nível de privilégio (PR:L no vetor CVSS). Não há bypass de autenticação embutido nesta CVE especificamente — o atacante precisa de uma conta, mesmo que de usuário comum, o que reduz a superfície a instâncias com self-registration aberto, credenciais padrão, ou a cenários pós-comprometimento de uma conta de baixo privilégio. A partir daí a exploração é trivial: uma requisição GET manipulando o parâmetro page do endpoint flow.html, sem interação de terceiros (UI:N) e com baixa complexidade (AC:L).
Na prática documentada pelos descobridores, a exploração seguiu três caminhos: (1) leitura de arquivos de configuração sensíveis dentro de WEB-INF, incluindo credenciais de banco de dados em texto claro, usadas para pivotar para outros sistemas; (2) bypass de controles de acesso, acessando funcionalidades administrativas (import/export, configuração AWS) a partir de uma conta sem privilégios; (3) em cenário pós-intrusão, inclusão local de arquivo (LFI) — mas essa etapa exige que o atacante já tenha conseguido enviar um arquivo JSP malicioso disfarçado (sem extensão .jsp) para o filesystem do servidor por algum outro vetor, o que não é parte da vulnerabilidade original e depende de acesso de escrita prévio.
A CVE está no catálogo KEV da CISA, confirmando exploração ativa observada, e há exploit público (Exploit-DB 44623) reproduzindo o PoC. Isso torna a falha atrativa para automação em varreduras de instâncias JasperReports expostas, especialmente porque só exige uma conta de teste ou de baixo privilégio para roubar credenciais de infraestrutura.
Versiones
Cómo protegerse
O fornecedor recomenda aplicar as atualizações conforme o advisory oficial (TIBCO Security Advisory de 17/04/2018). As fontes consultadas não trazem o número exato da versão corrigida para cada linha de produto (Server, Community Edition, ActiveMatrix BPM, AWS) — consulte o advisory da TIBCO diretamente para confirmar a versão de destino antes de planejar o upgrade, já que aplicar uma versão errada deixa a instância exposta sem indicação visível disso.
Como paliativo quando o upgrade não é imediato: restringir o acesso à aplicação a redes confiáveis, remover ou desabilitar contas de auto-registro (self-service) que concedem PR:L sem revisão, e auditar/rotacionar credenciais armazenadas em arquivos de configuração dentro de WEB-INF (datasources JDBC, chaves de integração AWS) assumindo que podem já ter sido lidas. Um WAF ou proxy reverso capaz de bloquear sequências de traversal ('../') e o parâmetro page com múltiplos níveis de subida no endpoint flow.html reduz a superfície, mas não é substituto do patch — o bypass via ponto e vírgula mostra que a aplicação tem lógica de parsing de path frágil, então qualquer filtro baseado em blacklist de padrões é contornável.
Não funciona como mitigação: apenas restringir a interface administrativa, já que o exploit é executado por contas de baixo privilégio contra endpoints nominalmente não-administrativos (flow.html é acessível a qualquer usuário autenticado).
Cómo detectar
Em logs de acesso web, procurar por requisições ao endpoint flow.html com o parâmetro _flowId=sampleFlow combinado com o parâmetro page contendo sequências de traversal ('../') ou apontando para caminhos fora de jsp/modules/ esperados, especialmente combinações terminadas em ponto e vírgula (;) — a técnica usada para burlar o apêndice automático de '.jsp'. Requisições desse padrão vindas de contas de usuário não-administrativas para caminhos administrativos (adminImport, awsConfiguration) ou para arquivos de propriedades (ex: referências a .properties) são indício forte de exploração.
Não há assinatura única confiável porque o parâmetro page aceita qualquer caminho relativo — variações de profundidade de traversal e de arquivo-alvo tornam a detecção baseada em padrão fixo incompleta; recomenda-se monitorar qualquer acesso anômalo a flow.html por contas de baixo privilégio como sinal comportamental, não apenas por assinatura de payload.