Skip to main content

As 10 principais vulnerabilidades de segurança do Java divulgadas [2019 - lista]

Escrito por

27 de maio de 2019

0 minutos de leitura

Nossos amigos da OverOps publicam um blog anual com uma lista da popularidade das bibliotecas Java, com base nas menções no GitHub. Por isso, neste post, vamos analisar as vulnerabilidades encontradas nas dez principais bibliotecas Java selecionadas pela OverOps e nos aprofundar em três delas. Primeiro, veja a seguir as dez escolhas da OverOps, em ordem de popularidade:

  1. Jackson

  2. Hadoop

  3. org.junit

  4. org.junit.runner

  5. org.springframework

  6. Jetty

  7. com.amazonaws.services

  8. org.apache.http.client

  9. org.apache.shiro

  10. org.apache.commons.lang3

De acordo com nosso banco de dados de vulnerabilidades da Snyk, ao longo de todo o seu ciclo de vida, foram divulgadas 162 vulnerabilidades nessas dez bibliotecas. Vamos analisar mais detalhadamente as bibliotecas Jackson, Spring Framework e Jetty para ver como as vulnerabilidades se distribuem entre as versões. Também vamos analisar a gravidade e os tipos de vulnerabilidades em cada biblioteca. Esses três exemplos são especialmente interessantes porque tiveram divulgações de segurança relevantes e são bibliotecas importantes e conhecidas, usadas em produção por muitos aplicativos.


Se a Snyk monitora seus projetos Java, você já terá recebido notificações sobre as vulnerabilidades encontradas nas análises. Caso contrário, faça um teste gratuito para saber se seu aplicativo foi afetado por alguma das vulnerabilidades mencionadas neste post: analise o repositório de código do seu aplicativo com a Snyk.


Vulnerabilidades do Jackson

A lista das principais bibliotecas mudou um pouco em 2018 em relação ao ano anterior, e o Jackson chegou ao topo. O Jackson é um pacote de processamento de dados muito comum, usado com frequência para analisar JSON em aplicativos Java.

Ao longo de todo o ciclo de vida da biblioteca, foram encontradas 21 vulnerabilidades, a maioria delas relacionada à desserialização de dados não confiáveis.

Tipo de vulnerabilidade

Número de vulnerabilidades

Desserialização de dados não confiáveis

16

Negação de serviço

2

Validação inadequada de entrada

1

Falsificação de solicitação do lado do servidor

1

Entidade externa XML

1

Desserialização é o processo pelo qual arquivos como JSON ou XML são recebidos e convertidos em um pacote que o aplicativo hospedeiro pode aceitar. A vulnerabilidade de desserialização de dados não confiáveis (CWE-502) ocorre quando o aplicativo desserializa dados que não vieram de uma fonte confiável sem verificar adequadamente se são válidos, permitindo que um invasor controle o estado ou o fluxo de execução.

Os problemas de desserialização em Java são conhecidos há anos. No entanto, o interesse pelo tema cresceu muito em 2015, quando foram encontradas classes que podiam ser exploradas para executar código remotamente em uma biblioteca popular (Apache Commons Collection). Essas classes foram usadas em vulnerabilidades de dia zero que afetaram o IBM WebSphere, o Oracle WebLogic e muitos outros produtos.

A desserialização é um alvo fácil: qualquer aplicativo pode ser comprometido se tiver uma classe vulnerável no caminho e realizar a desserialização de dados não confiáveis. Basta o invasor enviar a carga ao desserializador para que o comando seja executado.

Quase todas as vulnerabilidades relacionadas são classificadas como de alta gravidade, porque a maioria dos cenários envolve apenas a desserialização de dados não confiáveis — uma das vulnerabilidades mais graves na escala CVSS até hoje.

Gráfico de barras intitulado “Número de vulnerabilidades do Jackson por gravidade”, mostrando 19 vulnerabilidades de alta gravidade, 2 de média gravidade e 0 de baixa gravidade.

Você foi afetado?

A versão atual do Jackson, 2.9.9, na verdade não contém nenhuma vulnerabilidade conhecida. Esse é um ótimo sinal de que uma biblioteca popular é bem mantida: as vulnerabilidades relatadas recebem a devida atenção e são corrigidas rapidamente. Para saber se seus aplicativos Java foram afetados, faça um teste gratuito com a Snyk agora. Você também receberá orientações de correção, incluindo a versão segura mais próxima para a qual deve atualizar.

Vulnerabilidades do Spring Framework

O framework Spring é, sem dúvida, o framework web mais popular nos aplicativos Java modernos, usado por milhões de desenvolvedores. Ele não é apenas uma biblioteca, mas todo um ecossistema com vários componentes. Considerando o quanto esse ecossistema é usado, o número de vulnerabilidades não parece tão alto! Ao longo das décadas de existência do Spring Framework, foram encontradas apenas 96 vulnerabilidades. O gráfico a seguir mostra como elas se distribuem entre as várias versões do framework, de acordo com a versão em que foram identificadas:

Gráfico de barras que mostra as vulnerabilidades por versão do framework Spring, com a versão 3.x apresentando o maior número e a 5.x, o menor.

Como você pode imaginar, leva tempo para encontrar vulnerabilidades. Por isso, muitas permaneceram na biblioteca por várias versões antes da implementação das correções e foram contabilizadas uma vez para cada versão em que foram identificadas. É por isso que os números acima não somam 96. Essa também é a razão para o número de vulnerabilidades diminuir nas versões atuais: provavelmente ainda há vulnerabilidades, mas elas não foram encontradas até agora.

A maioria das vulnerabilidades é classificada como de gravidade alta ou média, algo comum em bibliotecas ou frameworks que oferecem muitos recursos aos aplicativos, incluindo suporte a endpoints, transporte e segurança.

Gráfico de barras que mostra as vulnerabilidades do framework Spring por gravidade: 45 altas, 43 médias e 8 baixas.

Agora, vamos analisar essas vulnerabilidades por tipo. A seguir, listamos todos os tipos de vulnerabilidade encontrados cinco ou mais vezes ao longo da história do Spring Framework. Há uma variedade considerável de tipos, mais uma vez porque o Spring Framework é muito abrangente. Vale mencionar também a vulnerabilidade de execução arbitrária de código, que às vezes tem origem na exploração da Spring Expression Language (SPEL), como esta vulnerabilidade de execução arbitrária de código, também conhecida como “Spring Break”.

Tipo de vulnerabilidade

Número de vulnerabilidades

Execução arbitrária de código

12

Entidade externa XML

11

Contorno de restrição de acesso

9

Negação de serviço

9

Travessia de diretório

7

Falsificação de solicitação entre sites

6

Contorno de autenticação

6

Script entre sites

5

Você foi afetado?

Como boa prática, você deve sempre atualizar seu aplicativo para as versões mais recentes disponíveis. Porém, isso nem sempre acontece regularmente por diversos motivos. Muitas vezes, bibliotecas e frameworks são atualizados quando necessário (com frequência), às vezes para corrigir uma vulnerabilidade de segurança, e pode ser difícil acompanhar o ritmo. Para saber se seus aplicativos Spring foram afetados, faça um teste gratuito com a Snyk agora. Você também receberá orientações de correção, incluindo a versão segura mais próxima para a qual deve atualizar.

Vulnerabilidades do Jetty

O projeto Eclipse Jetty às vezes é usado como biblioteca, mas provavelmente é mais utilizado como servidor de aplicativos leve (muitas vezes pelo framework Spring Boot, relacionado ao Spring Framework mencionado acima). O Jetty também vem sendo desenvolvido há várias décadas e conta com uma grande comunidade de usuários e colaboradores. Ao longo dos anos, o projeto Jetty acumulou 38 vulnerabilidades, e mais da metade delas são problemas criptográficos (13) ou vulnerabilidades de exposição de informações (6). Mais uma vez, pela própria natureza dos componentes de segurança e do que eles devem oferecer aos usuários, erros podem levar a problemas de segurança. A seguir está a lista completa das vulnerabilidades que apareceram mais de uma vez no projeto Jetty.

Tipo de vulnerabilidade

Número de vulnerabilidades

Problemas criptográficos

13

Exposição de informações

6

Script entre sites

3

Execução arbitrária de comandos

3

Contorno de autorização

2

Falsificação de solicitação entre sites

2

Sequestro de sessão

2

Você foi afetado?

A melhor forma de saber se você foi afetado por essas vulnerabilidades — ou por qualquer vulnerabilidade nas dependências transitivas usadas pelas suas dependências — é fazer um teste gratuito com a Snyk agora. Você também receberá orientações de correção, incluindo a versão segura mais próxima para a qual deve atualizar.

Na Snyk, fazemos o possível para facilitar a análise dos projetos dos desenvolvedores, com integrações para suas IDEs favoritas, repositórios de código como GitHub, GitLab e BitBucket, servidores de CI e muito mais. Você pode fazer análises gratuitas. Esperamos que aproveite os recursos de correção automática para atualizar para uma versão mais segura. Mantenha-se protegido!

Comece a jogar Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.