Skip to main content

3 lições inspiradas em Jedi para elevar o nível da segurança em JavaScript

Escrito por
feature may patch wing

4 de maio de 2022

0 minutos de leitura

Você pode achar que Star Wars é um filme feito só para geeks, mas e se eu dissesse que há lições profundas para a vida que podem ser aplicadas às práticas de segurança para desenvolvedores? Prepare seu sabre de luz e mergulhe na segurança em JavaScript!

Star Wars é uma saga épica de filmes de ficção científica escrita e dirigida por George Lucas que dispensa apresentações. Também sou fã e me identifico com muitas das frases ditas pelos Cavaleiros Jedi ao longo da saga.

Como você deve ter imaginado, sou um grande fã do icônico Mestre Jedi Yoda e acredito que muitos de seus ensinamentos trazem lições profundas para a vida — e para a segurança de aplicações.

“Tentar não. Faça ou não faça. Não existe tentar.” —Yoda, Star Wars Episódio V: O Império Contra-Ataca

Às vezes, começar algo novo parece intimidador, principalmente quando está um pouco fora da sua zona de conforto e da sua área de atuação. A segurança de aplicações pode parecer assim para você, mas foque em fazer acontecer, em vez de tentar alcançar a perfeição.

Você deve fazer revisões de código seguro ou apenas usar testes dinâmicos de segurança de aplicações? Deve usar um fluxo de trabalho de desenvolvimento com pré-hook para encontrar segredos ou integrar isso por meio de um app do GitHub? De quais ferramentas você precisa para integrar testes de segurança ao pipeline de CI?

São tantas perguntas — por isso gosto da frase de Yoda no filme: “Faça ou não faça. Não existe tentar.” Quando o assunto é prática de programação segura, qualquer começo já é um bom começo. O importante é criar várias camadas de segurança (como na expressão “segurança em profundidade”).

Confira algumas ferramentas práticas de segurança para JavaScript que você pode integrar hoje, sem complicação:

  1. Quer detectar e mitigar com eficiência ataques de fonte trojanizada em bases de código JavaScript usando o ESLint? Confira o repositório do GitHub para ver instruções rápidas de instalação e uso do eslint-anti-trojan-source e leia nosso artigo do blog para entender a importância disso.

  2. Você trabalha regularmente com arquivos lock do npm e do yarn, mas já pensou que os arquivos lock do npm podem ser um ponto cego de segurança para a injeção de módulos maliciosos? Confira o projeto lockfile-lint e integre-o ao seu conjunto de ferramentas de lint.

  3. Você já ouviu falar de dados exfiltrados de empresas da Fortune 500 por meio de um ataque à cadeia de suprimentos de código aberto chamado Dependency Confusion? Integre snync ao seu CI para evitar problemas desse tipo.

  4. Nunca foi tão fácil corrigir vulnerabilidades de segurança em código aberto com a Snyk. Basta iniciar a CLI da Snyk com npm install -g snyk e adicionar uma etapa snyk test aos scripts npm run. Ao importar seus repositórios do GitHub para a interface da Snyk, você recebe notificações oportunas sobre novas vulnerabilidades, análise estática de código e verificações de arquivos de manifesto, como os de projetos Terraform e Kubernetes, além de contêineres Docker por meio do Dockerfile.

  5. Que tal receber informações sobre vulnerabilidades no seu próprio código e nas dependências de terceiros? A extensão da Snyk para IDE permite revisar o código enquanto você programa, tornando a segurança mais eficaz e integrada ao seu fluxo de trabalho.

Visual Studio Code exibindo uma vulnerabilidade de travessia de caminho em JavaScript, com o código afetado, problemas de segurança e exemplos de correções.

“Seus olhos podem enganar você; não confie neles.” —Obi-Wan Kenobi, Star Wars Episódio IV: Uma Nova Esperança

Vamos combinar: programar é difícil. Escrever código é difícil. Ler código é ainda mais difícil, mas essa habilidade compensa no longo prazo, porque você lê mais código do que escreve.

Como desenvolvedores, treinamos a nós mesmos para identificar padrões específicos na lógica e no estilo do código. Isso nos ajuda a entender o significado do código e perceber erros que fogem desses padrões. No entanto, muitas vezes nos esquecemos de procurar padrões relacionados à segurança do código.

Essa falta de análise de segurança permitiu que algumas vulnerabilidades existissem por anos antes de serem identificadas. A divulgação, no ano passado, de uma vulnerabilidade de alta gravidade no programa sudo do Linux, identificada como CVE-2021-3156, é um exemplo perfeito. Essa vulnerabilidade, que permite a escalada de privilégios para superusuário root por meio do comando sudoedit -s, permaneceu escondida à vista de todos em um popular projeto de código aberto por dez anos antes de ser encontrada.

Para evitar descuidos semelhantes, confira algumas dicas para reforçar a segurança dos seus projetos JavaScript.

  • Pratique revisões de código seguro. Para saber em quais aspectos da sua base de código se concentrar, confira as 8 práticas recomendadas de revisão de código seguro de Trisha Gee e Brian Vermeer.

  • Se você desenvolve em Go, fique atento a ataques de injeção e a entradas perigosas fornecidas por usuários. Além dessas regras gerais, leia as dicas práticas de Eric Smalling e Gerred Dillion sobre práticas recomendadas de segurança em Go para mais sugestões.

  • Aprenda a evitar ataques de typosquatting, responsáveis por muitos módulos maliciosos no ecossistema npm.

  • Evite pacotes npm aparentemente muito populares, mas com indicadores de integridade baixos. Por exemplo, o popular cliente HTTP request para Node.js recebe cerca de 20.000.000 de downloads por semana. Só isso pode levar você a acreditar que é uma opção confiável, mas o mantenedor o marcou como obsoleto: o último commit e lançamento ocorreram há dois anos. Use o Snyk Advisor para saber mais sobre os indicadores de integridade de pacotes e ficar por dentro das novidades.

Página do Snyk Advisor para o pacote request do npm, mostrando uma pontuação de integridade de 69/100, um gráfico de popularidade e o status de manutenção inativa.

“Difícil de ver. Sempre em movimento está o futuro.” —Yoda, O Império Contra-Ataca

A segurança de aplicações é um alvo em constante movimento. O software evolui rapidamente e, com ele, a pesquisa em segurança avança e novas vulnerabilidades são descobertas. À medida que um ecossistema de software amadurece e ganha adoção, aumenta também a probabilidade de chamar a atenção de pesquisadores de segurança. O ecossistema de módulos de código aberto do npm para JavaScript é um bom exemplo.

Por que integrar a Snyk ao seu repositório Git? Você pode ter corrigido todas as vulnerabilidades de segurança que afetam sua base de código hoje, mas é impossível acompanhar todas as futuras CVEs e vulnerabilidades. Felizmente, a Snyk pode ajudar. Depois que seu repositório de código-fonte é conectado à Snyk, ele passa a ser monitorado por meio de uma verificação diária, que avisa você quando surgem novas vulnerabilidades. Se houver uma correção recomendada, a Snyk abrirá automaticamente um pull request no seu repositório. Para mitigar o risco, basta revisar a alteração no código e fazer o merge.

Verificações de pull request do GitHub mostrando um caminho de dependência vulnerável, um pull request verificado e nenhum conflito de merge

A poluição de protótipo não era comum há cinco anos. Hoje, porém, vemos com frequência projetos JavaScript afetados pelas características de herança prototípica do padrão ECMAScript. Nossa incapacidade de prever novas vulnerabilidades e a falta de tempo livre tornam difícil acompanhar os conceitos de segurança. Felizmente, o hub de recursos do Snyk Learn está aqui para ajudar. Totalmente gratuito e sem necessidade de cadastro, o Snyk Learn é inteiramente dedicado a lições curtas sobre conceitos de segurança de aplicações. Você pode até escolher lições com base no ecossistema da sua linguagem de programação preferida, seja Java, JavaScript, Python ou outra.

Página do Snyk Learn com lições de segurança em JavaScript, incluindo redirecionamento aberto, injeção de código e falsificação de solicitação do lado do servidor

Para concluir, desejo a você um feliz 4 de maio — e que a Força esteja com você!

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 feature ai violet
Blog

VulnBump: agentes de IA conseguem corrigir dependências vulneráveis sem quebrar o build?

O VulnBump testa agentes de IA em 307 atualizações reais de dependências. Uma correção só é considerada válida se eliminar a vulnerabilidade e mantiver o build e os testes funcionando.

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.