Skip to content

Vulnerable Components

Introdução

O uso de componentes vulneráveis pode comprometer nossas aplicações em diversos casos cenários, incluindo vulnerabilidades a nível de FrontEnd Web, Mobile e Backend, bem como infraestrutura (AWS, K8S, …).

Cenário Vulnerável

Estamos desenvolvendo nossa aplicação e realizamos a instalação de uma biblioteca sem verificar se ela possui alguma vulnerabilidade.

<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.15.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.15.0</version>
</dependency>
</dependencies>

O time de segurança acaba detectando algumas tentativas de ataques maliciosos nos mecanismos de Firewall, onde o atacante tentou executar o código de um Malware (provavelmente um ransomware) em nossa infraestrutura via uma falha na aplicação.

Log4Shell Attack Path

Ao investigamos um pouco mais e a vulnerabilidade explorada foi causada por uma vulnerabilidade chamada Log4Shell, encontrada na biblioteca Log4J na versão 2.15.0 e registrada na CVE-2021-44228.

Riscos

Ao não identificarmos dependências com vulnerabilidades, corremos os riscos de:

  • Expor formas de atacantes externos explorarem vulnerabilidades em nossas aplicações e infraestrutura.
  • Um ataque que permita ser executado dentro de nosso ecossistema (como log4shell) podem gerar vazamentos de dados caso as aplicações envolvidas tenham acesso a informações confidenciais e sensíveis.
  • Caso a vulnerabilidade tenha criticidade suficiente, criminosos podem desencadear um ataque de ransomware.

Como Mitigar

Antes de instalar alguma biblioteca, verifique se a mesma possui vulnerabilidades conhecidas.

Caso estas vulnerabilidades sejam HIGH ou CRITICAL, devemos buscar outra alternativa ou versão.

Github Advisory Database

Podemos usar o Github Advisory Database para pesquisar:

Github Advisory Database Log4J

Google OSV

Também é possível usar o Google OSV:

Terminal window
# em package.name usar groudId:artifactId
curl -d \
'{"version": "2.15.0", "package": {"name": "org.apache.logging.log4j:log4j-core", "ecosystem": "Maven"}}' \
"https://api.osv.dev/v1/query"

Ferramentas Nativas

Alguns ecossistemas já possuem ferramentas nativas para verificar por dependências vulneráveis.

Terminal window
dotnet list package --vulnerable

Referências