Skip to main content

77% dos sites usam pelo menos uma biblioteca JavaScript vulnerável

Escrito por
Headshot of Tim Kadlec

Tim Kadlec

29 de março de 2017

0 minutos de leitura

Na semana passada, foi publicado um estudo que apontou que cerca de 37% dos sites incluíam pelo menos uma biblioteca JavaScript com uma vulnerabilidade conhecida. Quando escrevemos sobre as descobertas, mencionamos que, na nossa opinião, a realidade era quase certamente pior.

E é. Muito pior, na verdade.

Fizemos nosso próprio teste com as 5.000 principais URLs da Alexa e descobrimos que impressionantes 76,6% delas incluem pelo menos uma biblioteca vulnerável. Se você quer saber como conduzimos o teste, os detalhes estão abaixo — ou fique à vontade para ir direto aos resultados.

O teste

Para realizar os testes, pegamos as 5.000 principais URLs da Alexa. Algumas apresentaram erros quando tentamos acessá-las, então continuamos descendo na lista da Alexa até reunir 5.000 páginas que carregaram corretamente.

Executamos o WebPageTest em cada URL. O WebPageTest carregou cada página no Chrome e, em seguida, executou um código JavaScript personalizado para identificar a versão de algumas bibliotecas JavaScript.

Por exemplo, para determinar qual versão do jQuery estava sendo usada, cada página executava o código a seguir após o carregamento:

return jQuery && jQuery.fn && jQuery.fn.jquery

Nesta primeira rodada, incluímos verificações para cada uma das bibliotecas a seguir:

  • jQuery

  • Handlebars

  • Mustache

  • React

  • Angular

  • Ember

  • jQuery UI

  • YUI

  • Dojo

Para cada versão detectada, consultamos o banco de dados de vulnerabilidades de código aberto da Snyk para descobrir quantas bibliotecas tinham uma vulnerabilidade conhecida.

Resultados nada animadores

Como mencionamos acima, a segurança das bibliotecas JavaScript está em um estado chocantemente ruim — não dá para dourar a pílula. Dos 5.000 sites, 3.831 (76,6%) incluem uma biblioteca JavaScript com pelo menos uma vulnerabilidade conhecida.

Gráfico de rosca mostrando bibliotecas JavaScript vulneráveis por site: 76,6% têm uma ou mais, e 23,4% não têm nenhuma.

Pode parecer estranho dizer isso diante de uma porcentagem tão alta, mas, assim como no estudo original, a realidade provavelmente é pior. Testamos nove bibliotecas JavaScript. A lista de frameworks e bibliotecas JavaScript disponíveis para desenvolvedores inclui centenas e centenas de opções. As que testamos estão entre as mais populares, então é improvável que a porcentagem aumente muito; ainda assim, alguns pontos percentuais a mais são quase certos.

E, mais uma vez, verificamos apenas vulnerabilidades conhecidas em bibliotecas JavaScript de terceiros executadas no lado do cliente. O uso no lado do servidor não foi considerado, assim como o JavaScript escrito sob medida. Além disso, novas vulnerabilidades são adicionadas diariamente ao nosso banco de dados — existem outras, mesmo que ainda não sejam conhecidas publicamente.

jQuery

Sem surpresa, o jQuery é a biblioteca mais popular entre as que testamos — seu domínio impressionante já está bem documentado. Detectamos o jQuery em 79% das 5.000 principais URLs.

Embora não seja uma biblioteca particularmente vulnerável (há cinco vulnerabilidades conhecidas, todas corrigidas em versões posteriores), a popularidade do jQuery já causa bastante confusão por si só.

Como se constatou, mesmo que verificássemos apenas o jQuery, ainda encontraríamos 75,1% dos sites usando uma versão com pelo menos uma vulnerabilidade. Isso se deve, em grande parte, à idade das bibliotecas jQuery que estão em produção. 17,4% das versões do jQuery encontradas em produção têm mais de cinco anos. Isso combina bastante com o estudo inicial: as pessoas não atualizam com muita frequência.

Gráfico de rosca intitulado “Idade das versões do jQuery em uso”, mostrando versões com menos de 1 a mais de 5 anos, distribuídas entre 15,6% e 17,4%.

O cenário é ainda mais complicado para quem usa jQuery, pois as únicas versões sem vulnerabilidades conhecidas são as >=3.0.0. Para muitos usuários atuais, isso significa que atualizar não é tão simples quanto instalar uma versão menor mais recente: há possíveis mudanças incompatíveis envolvidas. Cerca de 79% das bibliotecas jQuery detectadas eram da versão 1.x. Embora a versão final do jQuery 3.0.0 tenha sido lançada há quase um ano, apenas 3,6% dos sites usavam alguma versão 3.x.

Gráfico de rosca intitulado “Versões do jQuery detectadas”, mostrando 1.x com 79,4%, 2.x com 17,0% e 3.x com 3,6%.
Gráfico de barras com as dez versões mais populares do jQuery, lideradas pela 1.11.1, com 8,8%, e em queda até a 1.11.0, com 4,3%.

Na próxima semana, vamos analisar o jQuery em mais detalhes, pois sua popularidade sem igual o torna especialmente interessante.

jQuery UI

O jQuery UI ficou em segundo lugar em popularidade: foi encontrado em 19,3% das URLs testadas. Mais uma vez, a maioria dos usuários do jQuery UI utiliza uma versão vulnerável, apesar de já haver atualizações disponíveis. Cerca de 91% das bibliotecas jQuery UI encontradas têm pelo menos uma vulnerabilidade.

Gráfico de rosca que mostra a idade das versões do jQuery UI em uso: 2 a 3 anos, 33,2%; 5 anos ou mais, 21,8%; e menos de 1 ano, 6,6%.

Mais uma vez, boa parte disso se deve à falta de atualizações: 21,8% dos sites que usam jQuery UI estão em uma versão com mais de cinco anos.

Handlebars

O Handlebars foi detectado em 3,4% das URLs testadas. Entre elas, 68% usavam uma versão vulnerável do Handlebars. Mais uma vez, a principal causa é a adoção lenta de novas versões. À primeira vista, parece que o uso do Handlebars está um pouco mais atualizado. A versão mais recente da biblioteca (4.0.6) não foi detectada, mas a versão imediatamente anterior (4.0.5) também foi a mais comum em produção, representando 26,7% do uso do Handlebars.

Gráfico de rosca que mostra as versões do Handlebars em uso, por idade: 1–2 anos: 44,3%; 3–4 anos: 23,7%; 5+ anos: 16,6%; e 2–3 anos: 15,4%.

No entanto, como o ritmo de lançamentos diminuiu (foram lançadas apenas duas versões menores desde novembro de 2015), esses sites ainda usam uma versão da biblioteca com quase dois anos. No geral, 40% das versões do Handlebars detectadas tinham mais de três anos.

React, Mustache, Angular, YUI e Dojo

React (1,7%), Mustache (1,6%), Angular (1,3%), YUI (0,7%) e Dojo (0,2%) foram detectados com pouca frequência para que fosse possível tirar conclusões confiáveis sobre o uso de cada um. Mas, considerando o uso combinado, as versões vulneráveis ainda são muito comuns: 56,3% das versões dessas bibliotecas encontradas nos dados têm pelo menos uma vulnerabilidade.

Uma conclusão otimista

Não há como negar: a situação atual não é boa. Embora esperássemos que o número do estudo original fosse otimista, não imaginávamos que 77% dos sites usariam pelo menos uma biblioteca vulnerável.

E, para deixar claro, não existe uma solução única para esse problema. Em vez disso, precisamos combinar mais conscientização, ferramentas melhores e uma maneira mais simples de manter as dependências JavaScript no front-end — a adoção de gerenciadores de pacotes não é tão ampla quanto no desenvolvimento de back-end. Esse é só o começo.

Mas, como já dissemos, continuamos otimistas. Proteger JavaScript de terceiros é um problema solucionável — só exige um pouco mais de esforço do que imaginávamos.

Devido à sensibilidade de um relatório como este, não vamos compartilhar os dados brutos — isso seria praticamente entregar uma lista de sites e possíveis vetores de ataque. No entanto, se você é responsável por um site, pode falar conosco para saber se ele aparece no relatório e, em caso afirmativo, se alguma vulnerabilidade foi descoberta. Se você usa pacotes npm, testar sua aplicação com a Snyk também pode ajudar a identificar possíveis brechas de segurança.

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.