TIBCO JasperReports Server Information Disclosure Vulnerability
Prioritize patching. It under exploitation confirmed by CISA and has a public proof of concept.
Apply updates per vendor instructions.
Summary
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.
Technical detail
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/.
How it’s exploited
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.
Versions
How to protect
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).
How to detect
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.