Skip to main content

Como encontrar e corrigir segredos expostos no seu projeto do GitHub com o Snyk

Escrito por
feature insights context

25 de junho de 2024

0 minutos de leitura

O Snyk é uma excelente ferramenta para identificar vulnerabilidades em projetos, inclusive segredos definidos diretamente no código. Neste artigo, vamos mostrar como usar o Snyk para localizar segredos e credenciais expostos e, em seguida, refatorar nosso código para armazená-los no Doppler. Usaremos o projeto open source Snyk goof como aplicação de referência em Node.js, então fique à vontade para acompanhar.

Comece a usar o projeto Snyk goof

Para começar, faça um fork de projeto Snyk Goof para sua conta do GitHub. Esse projeto de exemplo está repleto de vulnerabilidades que podemos identificar com o Snyk.

Em seguida, crie uma conta gratuita no Snyk acessando Snyk login page e entre com sua conta do GitHub (ou de outro provedor de sua preferência).

Tela de cadastro com “Comece gratuitamente”, “Não é necessário cartão de crédito”, um botão do GitHub e opções para Bitbucket, Google, Azure AD ou Docker ID

Você precisará permitir que o Snyk acesse o endereço de e-mail vinculado à sua conta. O Snyk usa esse e-mail para enviar informações importantes, incluindo notificações de segurança e relatórios dos projetos que você importou.

Se você ainda não usou o Snyk, também precisará configurar as permissões de acesso para que ele possa verificar seus projetos regularmente e gerar automaticamente solicitações de pull para correções nos seus repositórios. Para isso, é necessário conceder permissões adicionais à sua conta do GitHub.

Selecione o GitHub como origem do código do seu projeto (ou escolha onde seu código está armazenado). Em seguida, você pode manter as configurações padrão, como mostra a captura de tela abaixo, para usar todos os recursos recomendados do Snyk. Se quiser, você pode desativar essas permissões, mas isso impedirá o uso dos recursos mais avançados e úteis de solicitações de pull para correções do Snyk, que automatizam correções de segurança e atualizações de dependências.

Lista de recursos ativados: verificações de pull requests, novos pull requests de correção, pull requests de atualização de dependências e Snyk Code.

Em seguida, selecione the Snyk goof project na lista de repositórios do GitHub para adicioná-lo como projeto à sua conta do Snyk.

Interface de seleção de repositório mostrando o repositório marcado “chandler767/nodejs-goof” e um link para ver todos os repositórios.

Para criar um grafo de dependências, o Snyk vai analisar o arquivo de manifesto `package.json` do projeto goof em Node.js. Esse grafo incluirá tanto as dependências diretas usadas pelo projeto quanto as dependências transitivas das quais as diretas dependem. O processo continua até formar um grafo completo de dependências. Em seguida, o Snyk compara essas dependências com seu banco de dados de vulnerabilidades e gera um relatório abrangente.

Painel de análise de segurança do projeto chandler767/nodejs-goof, com a quantidade de problemas identificados no Dockerfile, no package.json e na análise de código.

O projeto goof tem vários problemas. O Snyk pode ajudar você a corrigir muitos deles, atualizando as dependências diretas para versões sem vulnerabilidades ou aplicando correções. Vamos analisar o código mais de perto e identificar os segredos definidos diretamente nele que precisamos corrigir.

Corrija os segredos enviados ao GitHub

Acesse a visualização Code Analysis e filtre por Use of Hardcoded Credentials e Hardcoded Secret.

Lista de tipos de vulnerabilidade com as categorias Uso de credenciais codificadas e Segredo codificado marcadas, além da quantidade de vulnerabilidades.

Precisamos corrigir vários segredos. Primeiro, adicione esses segredos ao Doppler. Isso evitará que sejam expostos acidentalmente, centralizará o gerenciamento deles e permitirá configurar segredos diferentes para os ambientes de desenvolvimento e produção. Assim, não precisaremos mais nos preocupar em enviá-los ao GitHub.

Clone o projeto Goof com o Git para fazer as alterações necessárias no código. Depois, siga as instruções do Goof Project README para executar o projeto localmente.

Vamos começar as correções com um token definido diretamente no arquivo `app.js`:

A análise de segurança do código sinaliza um token secreto codificado diretamente em app.js pela regra CWE-547: segredo codificado diretamente.

Abra `app.js` no editor de código de sua preferência e localize a variável do token. Copie o token e acesse o Doppler para criar uma conta gratuita.

Interface de login escura com botões para entrar com Google e GitHub, campo de e-mail profissional, link para redefinir a senha e botão roxo "Entrar"

Na sua conta do Doppler, crie um projeto chamado `Goof`.

Página de projetos exibindo um botão “Adicionar projeto” e um projeto de exemplo com segredos fictícios

Os ambientes serão criados por padrão. Adicione todos os segredos à configuração Development > Dev. Assim, você poderá atualizar os segredos em todas as configurações derivadas. Clique na configuração Development > Dev e, em seguida, em Add First Secret.

Botão suspenso roxo com o texto “Adicionar primeiro segredo”

Crie um segredo chamado `SECRET_TOKEN` com o valor que está definido diretamente no código. Depois, clique em salvar.

Painel de secrets mostrando uma alteração não salva, o valor SECRET_TOKEN visível e uma seta vermelha apontando para o botão Salvar

Agora que adicionamos o segredo ao Doppler, podemos usá-lo no código. Substitua o valor do token definido diretamente no código por uma variável de ambiente. Vamos usar a Doppler CLI para injetar os segredos na aplicação. O código deve ficar assim:

var token = process.env.SECRET_TOKEN;

A Doppler CLI dá acesso aos seus segredos em todos os ambientes, do desenvolvimento local à CI/CD, homologação e produção. É um binário leve, disponível para todos os principais sistemas operacionais, gerenciadores de pacotes e Docker.

Siga as instruções para configurar a Doppler CLI no seu sistema na página de instalação da Doppler CLI. No Doppler, o acesso aos segredos de um projeto é limitado a um diretório específico do sistema de arquivos. Isso permite buscar segredos de vários projetos em uma única máquina.

No terminal, acesse o diretório do projeto Goof e configure o Doppler.

# Login to your Doppler account (if you haven't already)
doppler login

# Change to your project's directory
cd ./your/project/directory/nodejs-goof

# Select project and config
doppler setup

Selecione o projeto goof.

Terminal mostrando a configuração do Doppler, com o projeto “a-goof-project” selecionado.

Selecione a configuração dev:

Prompt do terminal para selecionar uma configuração, mostrando dev_personal com as opções dev, stg e prd.

Para usar seus segredos, acrescente o comando `‘doppler run’` ao iniciar a aplicação. Esse comando vai injetar os segredos no ambiente da aplicação.

doppler run npm start

Lembre-se de adicionar todos os seus segredos e configurar os ambientes de acordo com as necessidades da sua aplicação e da sua equipe. Você também pode configurar reinicializações automáticas da aplicação quando editar segredos.

Proteja segredos com Snyk e Doppler

Snyk e Doppler são ótimos exemplos de ferramentas para desenvolvedores que funcionam ainda melhor juntas. Comece a integrar o Snyk e o Doppler hoje mesmo e veja como essas ferramentas poderosas podem simplificar seu processo de desenvolvimento. Confira o Snyk e o Doppler em ação e dê o primeiro passo rumo a um fluxo de trabalho mais seguro e eficiente.

Leia mais

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.

illustration hero ai
Blog

O furacão da IA chegou

A IA está acelerando tanto a criação de software quanto os ataques cibernéticos. As lideranças devem proteger agentes e código desde o início, aplicar controles em tempo de execução e validar as defesas de forma independente.

feature insights context
Blog

A prevenção é essencialmente um problema resolvido?

A prevenção em código gerado por agentes está resolvida do ponto de vista arquitetural — mas escolher controles que protejam a segurança sem desacelerar o desenvolvimento continua sendo um desafio.