Skip to main content

Segurança em Golang: vulnerabilidade de desvio de restrição de acesso em JWT

Escrito por

Leeya Shaltiel

snykgo header

22 de dezembro de 2020

0 minutos de leitura

Em julho, a equipe de segurança da Snyk foi alertada sobre um possível problema de segurança no pacote JWT. Esse pacote oferece uma implementação de JSON Web Tokens em Go, e o problema identificado estava relacionado à função VerifyAudience, que não funcionava como esperado. A função permitia passar um valor de aspas duplas (“”), o que poderia fazer a verificação do público ser aprovada indevidamente.

Curiosamente, a vulnerabilidade foi corrigida seis meses before de o problema ser aberto (a correção incluiu uma validação adicional do valor aud usando a função ValidateAudienceAgainst). No entanto, a correção foi disponibilizada em uma versão específica (v4.0.0-preview1) no pkg.go.dev, mas não foi incorporada ao branch master do repositório.

Assim como em outros ecossistemas, muitos desenvolvedores Go preferem simplesmente clonar o branch master de um repositório do GitHub. Nesse caso, isso significava duas coisas:

  1. O problema foi aberto after de uma versão corrigida já estar disponível!

  2. O número de projetos afetados por essa vulnerabilidade continuou alto, principalmente porque a maioria usa o branch master, e não a tag específica com a correção disponível.

Depois de qualificar e confirmar a vulnerabilidade, notificamos o responsável pela manutenção do pacote. Como não recebemos resposta e a equipe de pesquisa de segurança concluiu que o risco era alto demais, a Snyk atribuiu um CVE e o publicou no início de setembro.

Essa vulnerabilidade é apenas um exemplo entre centenas de vulnerabilidades proprietárias de segurança em Golang descobertas neste ano pela equipe de pesquisa de segurança da Snyk. Neste artigo, mostramos um pouco dos processos utilizados e das tendências observadas pela Snyk nesse ecossistema em rápido crescimento.

A popularidade de Golang e o aumento dos riscos de segurança

É difícil não se impressionar com o crescimento de Golang nos últimos anos. Ano após ano, Golang — ou Go, como é mais conhecido — aparece entre as cinco linguagens mais admiradas e desejadas nas pesquisas anuais com desenvolvedores do Stack Overflow. A atividade no GitHub também é intensa: Go ocupa o 4º lugar em pull requests e issues, o 3º em stars e o 7º em pushes.

Praticidade, facilidade de uso e desempenho: esses são alguns dos principais motivos pelos quais os desenvolvedores gostam de criar com Go. Mas e a segurança? Segundo a pesquisa da comunidade Go de 2019, 75% dos desenvolvedores Go afirmam que a segurança é importante para eles, e a equipe de Go anunciou recentemente planos para criar um banco de dados de vulnerabilidades conhecidas, em conjunto com scanners de segurança para Golang. Os riscos de segurança em Golang são reais, e essas são medidas importantes para tornar o desenvolvimento nessa linguagem mais seguro.

Na Snyk, também investimos bastante para alcançar esse mesmo objetivo. Como resultado do trabalho da equipe de pesquisa de segurança da Snyk, centenas de novas vulnerabilidades de segurança em Golang foram adicionadas ao banco de dados de vulnerabilidades Snyk Intel desde 2019. Um número cada vez maior de usuários da Snyk usa essas informações para testar e monitorar projetos em Golang em busca de vulnerabilidades. Mas não foi fácil obtê-las: esse ecossistema é relativamente novo, e o processo de descoberta é bem diferente do que ocorre em linguagens de programação mais consolidadas.

O que torna a pesquisa de segurança em Golang tão única

Quando o assunto é descobrir novas vulnerabilidades e fazer pesquisa de segurança, Go se destaca por vários motivos.

Primeiro, o número total de vulnerabilidades de segurança. Em um período relativamente curto, observamos um crescimento significativo nessa quantidade. Em comparação com linguagens de programação mais consolidadas, como Java e JavaScript, o ecossistema Go não tem um histórico muito longo de vulnerabilidades. No entanto, os dados que reunimos mostram um aumento tanto no número de pacotes e módulos quanto na conscientização da comunidade Go sobre questões de segurança. O número de vulnerabilidades de segurança em Golang adicionadas ao banco de dados de vulnerabilidades Snyk Intel em 2020 quase dobrou o total de vulnerabilidades adicionadas entre 2015 e 2019!

Página do banco de dados de vulnerabilidades da Snyk que lista vulnerabilidades, pacotes afetados, linguagem de programação e datas de publicação

Outro dado que merece destaque é que a variedade de tipos de vulnerabilidade também é muito maior em comparação com outras linguagens. Somente entre as vulnerabilidades adicionadas em 2020, há 44 CWEs diferentes! Essa ampla variedade, junto com o grande número de vulnerabilidades, torna a pesquisa de segurança especialmente interessante.

Além dos CVEs: a pesquisa da Snyk sobre vulnerabilidades de segurança em Golang

Nem toda vulnerabilidade é divulgada e recebe um CVE. Além de acompanhar novos CVEs, a equipe de segurança da Snyk consegue identificar vulnerabilidades que ainda não foram divulgadas oficialmente, mas que podem, por exemplo, estar sendo discutidas em fóruns públicos. Essa pesquisa é um dos pilares que tornam o banco de dados de vulnerabilidades Snyk Intel tão completo: ele oferece uma cobertura de segurança abrangente, que vai além das informações públicas e dos relatórios oficiais de CVEs.

Essas vulnerabilidades costumam ser as mais perigosas. Agentes mal-intencionados podem tomar conhecimento antecipado da vulnerabilidade e aproveitar o intervalo entre o início das discussões e o reconhecimento público do problema. Eles sabem que, depois da divulgação, é apenas uma questão de tempo até que uma correção seja disponibilizada.

Para reduzir esse intervalo, a Snyk monitora diversas fontes online, como fóruns técnicos, issues e pull requests do GitHub e até redes sociais, para identificar novas vulnerabilidades o mais cedo possível, ainda no início do ciclo de vida delas. Fazemos a triagem das vulnerabilidades, avaliamos a gravidade e verificamos se há uma correção disponível por meio de uma atualização. Depois de confirmadas, elas são adicionadas ao nosso banco de dados e os usuários são notificados.

No caso de Go, a Snyk recebe dezenas de alertas por dia sobre possíveis novas vulnerabilidades de segurança. O alerta é apenas o primeiro indício: em seguida, investigamos o problema a fundo para confirmar se é uma vulnerabilidade. Durante a triagem do relatório de segurança, realizamos uma prova de conceito (POC) do problema e, se a vulnerabilidade for confirmada, atribuímos um CVE. Também entramos em contato com a pessoa responsável pela manutenção do pacote open source em questão para que as medidas adequadas de mitigação sejam tomadas o quanto antes.

A pesquisa que leva à descoberta dessas vulnerabilidades proprietárias tem um papel fundamental na proteção de aplicações. De fato, entre as 10 vulnerabilidades de segurança em Go mais comuns encontradas entre os clientes da Snyk, 7 são vulnerabilidades proprietárias descobertas pela Snyk e que não constavam em nenhum banco de dados de CVEs.

Snyk para Golang

A Snyk oferece às equipes de desenvolvimento e segurança uma solução fácil de implementar, que agiliza as correções e é alimentada por informações precisas sobre segurança, para que possam criar aplicações em Golang com mais segurança:

  • Fácil para desenvolvedores - A Snyk se integra perfeitamente aos fluxos de trabalho de desenvolvimento existentes, analisa projetos em questão de segundos (até projetos do tamanho do Kubernetes!) e é extremamente fácil de usar, o que favorece a adoção e aumenta a produtividade.

  • Cobertura abrangente - A Snyk identifica vulnerabilidades de segurança E problemas de licença em diferentes etapas do SDLC, com suporte a aplicações Go Modules, inclusive as executadas em contêineres.

  • Profundidade de segurança - Desde 2019, a Snyk adicionou centenas de vulnerabilidades proprietárias de segurança em Go ao banco de dados de vulnerabilidades Snyk Intel. A maioria delas é proprietária, não está no NVD e foi descoberta pela equipe de pesquisa de segurança da Snyk.

Usa Go e quer começar? Experimente a Snyk gratuitamente!

Comece a jogar Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo à gravação sob demanda do nosso workshop virtual introdutório.