77% de 433 mil sites usam bibliotecas JavaScript vulneráveis
Tim Kadlec
21 de novembro de 2017
0 minutos de leituraNa semana passada, lançamos nosso primeiro relatório State of Open Source Security. Entre as descobertas mencionadas no relatório, uma análise de cerca de 433 mil sites constatou que 77% deles usam pelo menos uma biblioteca JavaScript de front-end com uma vulnerabilidade de segurança conhecida. Esse número é semelhante ao que divulgamos em março, mas, agora que o Google Chrome usa o Snyk no Lighthouse para testar bibliotecas JavaScript vulneráveis, podemos obter resultados muito mais completos.
Os dados do Lighthouse são coletados como parte do HTTP Archive e podem ser consultados pelo BigQuery. Com isso, podemos consultar dados de auditoria do Lighthouse em grande escala.
Quantos sites estão vulneráveis
Os dados de 15 de outubro (a execução mais recente disponível) no BigQuery incluem informações coletadas de 439.176 URLs diferentes. Depois de desconsiderar as URLs em que o Lighthouse não conseguiu ser executado ou cuja auditoria não foi concluída por algum motivo, temos um conjunto de dados com 418.112 sites diferentes para consultar.
A primeira pergunta é: quantos desses sites têm vulnerabilidades conhecidas? Podemos consultar os relatórios para descobrir:
Os resultados estão bem alinhados com nosso estudo em menor escala de março: 77,3% (323.132) desses sites não passaram na auditoria. Em outras palavras, 77,3% deles contêm pelo menos uma biblioteca JavaScript do lado do cliente com uma vulnerabilidade de segurança conhecida. A nova versão do site HTTP Archive vai mostrar como esse número muda ao longo do tempo.
Também podemos aprofundar a análise para ver quantas vulnerabilidades conhecidas essas bibliotecas apresentam:

Acontece que, se um site tem pelo menos uma vulnerabilidade conhecida, é provável que tenha outras. 51,8% dos sites vulneráveis têm mais de uma vulnerabilidade de segurança conhecida. Embora a maioria tenha uma ou duas, a cauda longa é preocupante: 9,2% dos sites usam bibliotecas com quatro ou mais vulnerabilidades de segurança conhecidas no total.
Quais bibliotecas são encontradas vulneráveis com mais frequência
Com os dados de auditoria do Lighthouse, também podemos identificar quais bibliotecas são encontradas vulneráveis com mais frequência.
Primeiro, podemos consultar quais bibliotecas são detectadas com mais frequência, sejam elas vulneráveis ou não. A consulta a seguir busca as dez bibliotecas mais encontradas:
Biblioteca | Número de detecções | Adoção % |
|---|---|---|
jQuery | 344.643 | 82,4% |
jQuery UI | 83.075 | 19,9% |
Modernizr | 63.122 | 15,1% |
Bootstrap | 57.154 | 13,7% |
yepnope | 41.537 | 9,9% |
FlexSlider | 33.002 | 7,9% |
Underscore | 17.633 | 4,2% |
Google Maps | 14.312 | 3,4% |
Moment.js | 14.038 | 3,4% |
SWFObject | 13.521 | 3,2% |
Sem surpresa, o jQuery está no topo da lista. Isso está de acordo com o que vimos em março e com o que você provavelmente esperaria. Nenhuma outra biblioteca chegou perto da popularidade universal do jQuery. Uma ressalva: a presença do React está sendo subestimada. Quando o script de detecção atualizado for incluído no Lighthouse, os números do React vão aumentar (e a porcentagem geral de sites vulneráveis provavelmente também terá um pequeno aumento).
Agora, vamos mudar o foco e ver quais bibliotecas são encontradas com vulnerabilidades conhecidas.
Os primeiros nomes da lista são bem parecidos.
Biblioteca | Número de ocorrências vulneráveis | % de todas as ocorrências detectadas dessa biblioteca |
|---|---|---|
jQuery | 318.786 | 92,5% |
jQuery UI | 74.486 | 89,7% |
Moment.js | 10.245 | 73,0% |
AngularJS | 7.609 | 84,8% |
Handlebars | 3.129 | 60,7% |
Mustache | 1.925 | 51,0% |
YUI 3 | 559 | 40,3% |
jQuery Mobile | 413 | 3,7% |
Knockout | 407 | 19,6% |
React | 181 | 10,2% |
Os percentuais não são nada animadores. Em produção, 92,5% das versões do jQuery — de longe a biblioteca mais popular da web — têm uma vulnerabilidade de segurança conhecida. Na verdade, entre as dez bibliotecas mais frequentemente encontradas com uma vulnerabilidade conhecida, seis são vulneráveis na maioria das versões em produção.
Isso acontece apesar de todas as bibliotecas dessa lista terem versões disponíveis sem essas vulnerabilidades.
Biblioteca | Versão mais antiga sem vulnerabilidades conhecidas | Data de lançamento |
|---|---|---|
jQuery | 3.0.0 | Junho de 2016 |
jQuery UI | 1.10.0 | Janeiro de 2013 |
Moment.js | 2.15.2 | Outubro de 2016 |
AngularJS | 1.6.1 | Dezembro de 2016 |
Handlebars | 4.0.0 | Setembro de 2015 |
Mustache | 2.2.1 | Dezembro de 2015 |
YUI 3 | 3.10.3 | Junho de 2016 |
jQuery Mobile | 1.2.0 | Outubro de 2012 |
Knockout | 3.0.0 | Outubro de 2013 |
React | 0.14.0 | Outubro de 2015 |
As bibliotecas de front-end mais frequentemente encontradas vulneráveis estão há um a cinco anos sem vulnerabilidades conhecidas. Na prática, bibliotecas e frameworks de front-end muitas vezes deixam de ser atualizados depois que entram em produção.
Há motivos para ter esperança
O cenário atual é um tanto sombrio — não dá para negar. Esses dados não significam que todos os 77% desses sites possam ser explorados (é possível que não usem os métodos vulneráveis), mas isso é pouco consolo. Em 77% dos sites, basta um desenvolvedor fazer uma chamada a um método para que eles fiquem vulneráveis. Como vimos em 2017, é preciso levar muito a sério as vulnerabilidades de código aberto.
Mas também há um lado positivo. Embora haja muitas vulnerabilidades em produção, elas já foram corrigidas nas próprias bibliotecas. Todas as principais bibliotecas têm versões disponíveis sem vulnerabilidades de segurança conhecidas — só precisamos colocá-las em produção.
Para melhorar esse cenário, algumas coisas precisam acontecer. A primeira é aprimorar as ferramentas e ampliar sua adoção. De acordo com nossa pesquisa State of Open Source Security, 38% das pessoas que usam código aberto não recorrem a nenhuma ferramenta automatizada para manter os pacotes atualizados. Aposto que, se você analisasse especificamente o uso de JavaScript de front-end, a adoção seria ainda menor.
Esse número precisa melhorar. As melhorias no npm e no Yarn simplificaram muito o gerenciamento de pacotes de front-end para desenvolvedores. Combinar um fluxo de trabalho sólido para gerenciamento de pacotes com ferramentas como o Snyk, que ajudam você a encontrar, prevenir, corrigir e monitorar esses pacotes e suas dependências, ajuda muito a tornar a web mais segura.
A segunda necessidade é aumentar a conscientização e a compreensão geral do problema. Foi por isso que publicamos o relatório State of Open Source Security: para esclarecer os desafios de proteger o código aberto e ajudar a encontrar maneiras de melhorar.
A auditoria de bibliotecas vulneráveis no Lighthouse (e no Sonar) também ajuda. Essas ferramentas facilitam a identificação de problemas nos sites que desenvolvem. E, graças ao HTTP Archive e ao BigQuery, temos acesso fácil a dados que nos permitem entender a dimensão do problema.
Embora os dados atuais não sejam animadores, mais conscientização e ferramentas melhores podem ajudar a resolver esse problema no futuro.