Skip to main content

Vulnerabilidade na desserialização do Jackson

Escrito por

21 de agosto de 2019

0 minutos de leitura

Em 29 de julho de 2019, foi divulgada uma vulnerabilidade de alta gravidade de desserialização de dados não confiáveis (CVE-2019-14379, CVE-2019-14439) que afeta todas as versões de com.fasterxml.jackson.core:jackson-databind até a 2.9.9.2.

Se você usa o Spring Boot, fique atento: a versão atual (2.1.7) depende do pacote jackson-databind 2.9.9, uma versão antiga e vulnerável.

Já atualizamos nosso banco de dados, e os mantenedores do pacote jackson-databind criaram uma correção. Se você usa o Snyk, já recebeu um alerta sobre essa vulnerabilidade. A equipe responsável pelo pacote jackson-databind fez um excelente trabalho e lançou uma nova versão (2.9.9.3), sem essa vulnerabilidade. O scanner do Snyk recomendará essa versão como correção, para que você não continue vulnerável.

Sobre a vulnerabilidade

Esta não é a primeira vez que o pacote jackson-databind é afetado por uma vulnerabilidade de desserialização de dados não confiáveis. Na verdade, desde 2018, mais de uma dúzia dessas vulnerabilidades foram identificadas e divulgadas — e quase todas são consideradas de alta gravidade.

O principal objetivo da biblioteca é serializar objetos Java em JSON e fazer o caminho inverso. O problema está em desserializar JSON de volta para objetos Java. Quando uma aplicação Java mal desenvolvida consegue desserializar uma string JSON de uma fonte não confiável, um hacker pode, por exemplo, explorar essa falha para executar código remotamente.

Se a tipagem polimórfica estiver ativada no Jackson, um invasor poderá usar um gadget para lançar um ataque quando controlar a entrada JSON. Um gadget é uma classe ou função com código executável já presente no processo vulnerável. Esse código existente pode ser reutilizado para fins maliciosos.

Nesta vulnerabilidade específica, um gadget do Ehcache poderia ser usado indevidamente quando a tipagem padrão estivesse ativada no Jackson. Os mantenedores do jackson-databind resolveram o problema rapidamente, adicionando o gadget à lista de bloqueio existente. A versão 2.9.9.3 foi lançada sem essa vulnerabilidade.

Spring Boot

No momento da publicação deste artigo, a versão mais recente do Spring Boot é a 2.1.7. Essa versão depende do pacote jackson-databind 2.9.9, uma versão antiga.

Isso significa que, se você criar uma nova aplicação Spring Boot usando o Inicializador do Sping Boot , certamente incluirá uma versão vulnerável do jackson-databind.

Enquanto uma nova versão do Spring Boot ou do spring-boot-starter-data-rest não é lançada, podemos substituir as versões do jackson-databind. Uma opção é excluir o pacote individual, como no exemplo do Maven abaixo:

<dependencies>
   <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-data-rest</artifactId>
       <exclusions>
           <exclusion>
               <groupId>com.fasterxml.jackson.core</groupId>
               <artifactId>jackson-databind</artifactId>
           </exclusion>
       </exclusions>
   </dependency>
   <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.9.9.3</version>
   </dependency>
…
</dependencies>

"Uma solução melhor é definir a propriedade do Maven com a versão adequada. Assim, o Spring Boot importa a BOM (Bill of Materials) corrigida do Jackson, que gerencia todas as dependências individuais do Jackson. Em um projeto Gradle, você pode fazer algo semelhante no arquivo gradle.properties. Para saber mais sobre a BOM do Maven e entender sua importância para o Spring Boot, leia o artigo: "O que é um arquivo Bill of Materials (BOM)?"

<properties>
    <jackson.version>2.9.9.20190807</jackson.version>
</properties>

Bibliotecas como jackson-databind são, muitas vezes, dependências indiretas que fazem parte de um framework maior. Por isso, é recomendável verificar suas aplicações em busca de vulnerabilidades conhecidas, especialmente nessas dependências indiretas. Ao fazer isso regularmente, você saberá se está vulnerável e poderá corrigir os problemas.

Comece a participar de desafios de Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.

Leia mais

blog feature snyk container custom base recommendations
Blog

Conheça o Evo Agentic AppSec: segurança que acompanha o ritmo do desenvolvimento com IA

O desenvolvimento impulsionado por IA está avançando mais rápido do que os fluxos de trabalho de segurança tradicionais. O AppSec agentivo da Snyk usa agentes de segurança para encontrar, corrigir e verificar vulnerabilidades continuamente, enquanto as pessoas definem os critérios.

Blog

Modelos de ponta encontraram as vulnerabilidades. Só o atacante encontrou as cadeias.

A análise estática encontrou as falhas, mas só os testes de ataque em aplicações ativas provaram como elas poderiam ser encadeadas para causar invasões. Uma comparação entre Evo COS, Claude Security e Claude Code Security.

feature insights context
Blog

Os ataques autônomos já chegaram. A defesa precisa acompanhar o ritmo.

Os atacantes autônomos estão reduzindo o tempo disponível para a defesa. Saiba como a descoberta, a correção, a validação e a prevenção contínuas ajudam as equipes de segurança a acompanhar esse ritmo.