Skip to main content

Desenvolvimento seguro em Elixir com a Snyk

Escrito por

27 de abril de 2021

0 minutos de leitura

Temos o prazer de anunciar o suporte a Elixir, que ajuda equipes de desenvolvimento e segurança a encontrar, priorizar e corrigir vulnerabilidades com facilidade nos pacotes de Elixir e Erlang usados para criar suas aplicações!

Com a CLI da Snyk, quem desenvolve em Elixir agora pode testar e monitorar projetos Mix/Hex manualmente ou em etapas importantes do processo de CI, garantindo que vulnerabilidades conhecidas sejam detectadas desde cedo, antes que o código seja implantado em produção.

O suporte a Elixir está disponível — gratuitamente — em todos os planos da Snyk!

Segurança em Elixir: 10 anos de história

Elixir, que comemorou recentemente seu 10º aniversário, é uma linguagem de programação funcional, concorrente e de uso geral que roda na máquina virtual BEAM, usada para implementar a linguagem de programação Erlang. As ferramentas produtivas de desenvolvimento e o design extensível fizeram de Elixir a escolha preferida de muitas organizações, incluindo Bleacher Report, Mozilla, PagerDuty, PepsiCo e TheRealReal. Os projetos de código aberto desse ecossistema também estão prosperando. Hex, o gerenciador de pacotes do ecossistema Erlang — que inclui Elixir —, agora conta com mais de 12.000 pacotes, baixados milhões de vezes por dia.

Assim como em qualquer outra linguagem ou ecossistema, esses pacotes de código aberto representam um risco à segurança: alguns pacotes de Elixir contêm vulnerabilidades de segurança conhecidas que podem ser exploradas por agentes mal-intencionados. Cerca de 78% das vulnerabilidades de código aberto são encontradas em dependências transitivas, o que significa que a grande maioria das vulnerabilidades na sua aplicação tem origem em pacotes de Elixir que você nem sabia que estava usando!

Página do Snyk Vulnerability Database com um campo de busca, filtros de pacotes e uma lista de vulnerabilidades de software com classificações de gravidade.

A boa notícia é que o número de vulnerabilidades conhecidas em pacotes de Elixir continua relativamente baixo, principalmente em comparação com outros ecossistemas, como Java, JavaScript, Python, .NET e até Go, outra linguagem relativamente nova. Além disso, 90% das vulnerabilidades existentes em Elixir têm uma correção: uma versão mais recente e segura do pacote para a qual você pode atualizar. A má notícia é que existem algumas vulnerabilidades graves em versões antigas de pacotes de Elixir amplamente usados.

Mas sabe o que é melhor? Com a Snyk, você consegue detectar essas vulnerabilidades desde cedo e aplicar uma correção rapidamente.

Teste e monitore sua aplicação Elixir

A CLI da Snyk permite encontrar e corrigir vulnerabilidades conhecidas nas suas dependências, tanto manualmente quanto como parte do fluxo de trabalho de CI, usando a linha de comando.

Se você está começando a usar a CLI da Snyk, primeiro será necessário instalá-la pri

meiro. Há várias maneiras de instalar a CLI da Snyk. Veja como usar npm:

npm install -g snyk 

Em seguida, vincule a CLI da Snyk à sua conta autenticando-se:

snyk auth

Uma aba será aberta no navegador, solicitando que você autentique a CLI para usá-la com sua conta.

Basta clicar em Autenticar.

Agora você está pronto para testar sua aplicação Elixir.

Acesse a pasta local que contém sua aplicação Elixir e execute:

snyk test

É comum usar projetos umbrella em Elixir: subprojetos (“apps”, na terminologia de Elixir), cada um com seu próprio arquivo mix.exs, mas todos compartilhando um único arquivo mix.lock. A Snyk oferece suporte a essa estrutura de projeto desde o início, sem necessidade de parâmetros adicionais da CLI: basta usar. Cada “app” é representado como um projeto separado na CLI e na interface da Snyk, mas todos ficam agrupados.

Depois que uma análise é executada, a Snyk compara a lista de dependências com a Snyk Vulnerability Database. Em seguida, lista todas as vulnerabilidades identificadas, incluindo o caminho até elas e orientações para corrigi-las.

Saída do terminal de uma análise de segurança de dependências que mostra uma vulnerabilidade de negação de serviço de alta gravidade em sweet_xml e oito caminhos vulneráveis.

Como mostra a imagem acima, testei o projeto Changelog — uma aplicação Elixir criada com o framework Phoenix, PostgreSQL e vários outros projetos de código aberto. Atualmente, o projeto contém uma vulnerabilidade de alta gravidade em um pacote chamado sweet_xml, que permite a atacantes causar uma negação de serviço por meio de um ataque de expansão de entidades XML com um DTD inline. sweet_xml é um pacote extremamente popular, baixado milhares de vezes por dia e geralmente escondido a várias camadas de dependências dentro de uma aplicação. Infelizmente, não há uma versão mais recente desse pacote com uma correção.

Para monitorar seu projeto regularmente e receber notificações quando novas vulnerabilidades forem introduzidas, use o seguinte comando:

snyk monitor

A Snyk cria um retrato das suas dependências atuais para verificar se surgiram novas vulnerabilidades divulgadas ou se foi disponibilizado um patch ou caminho de atualização que antes não existia. Agora você pode entrar no app da Snyk para ver os resultados da análise na página Projetos:

Painel do projeto Snyk mostrando vulnerabilidades abertas de alta gravidade e problemas de dependências em bankplatform/apps/backoffice

No projeto testado desta vez, a Snyk identificou algumas vulnerabilidades associadas ao plug — um pacote popular que já foi baixado milhões de vezes —, incluindo vulnerabilidades de alta gravidade.

Para ajudar você a entender a vulnerabilidade e como ela chegou à sua aplicação, os cartões de problemas explicam o que ela significa, como foi introduzida e para qual versão você deve atualizar. Uma pontuação de prioridade ajuda a definir o que deve ser priorizado.

Detalhes da vulnerabilidade de segurança do plug, mostrando validação inadequada de entrada, classificação CVSS alta de 8,8, pontuação 511 e versões afetadas do pacote.

Na aba Dependências, você verá a árvore completa de dependências, que mostra exatamente como uma vulnerabilidade foi introduzida na sua aplicação.

Painel do projeto da Snyk mostrando vulnerabilidades divulgadas e uma árvore de dependências para bankplatform/apps/backoffice.

Como mencionado antes, você também pode usar a CLI da Snyk para executar snyk test ou snyk monitor como parte do seu pipeline de CI. A integração da Snyk com Jenkins, por exemplo, permite testar e monitorar continuamente seu código em busca de vulnerabilidades, interrompendo as compilações quando elas são identificadas.

Desenvolva com agilidade. Mantenha a segurança!

A grande maioria do código usado para criar as aplicações atuais é de código aberto. Os desenvolvedores preferem criar com código aberto pela rapidez, flexibilidade, extensibilidade e qualidade que ele oferece. Mas, como explicamos acima, essa preferência e a crescente dependência do código aberto trazem riscos que precisam ser gerenciados e mitigados.

Com o novo suporte da Snyk a Elixir, o ecossistema Elixir está mais seguro.

E por onde começar? Que bom que você perguntou! Consulte a documentação da Snyk para Elixir para ver mais instruções de uso. O suporte a Elixir está disponível em todos os planos da Snyk. Se você já usa a Snyk, basta instalar a CLI da Snyk e seguir as instruções acima. Se ainda não usa a Snyk, cadastre-se gratuitamente aqui!

Comece a resolver desafios de capture the flag

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