Skip to main content

Angular vs. React: duelo de segurança de 2019

Escrito por
JavaScript Report feature

30 de outubro de 2019

0 minutos de leitura

Bem-vindo ao relatório State of JavaScript Frameworks Security 2019 da Snyk.

Baixe o relatório aqui.

Vamos começar explorando as diferentes vulnerabilidades de segurança encontradas nos projetos principais de Angular e React. Em seguida, analisamos a gravidade de cada vulnerabilidade e as diferenças entre elas. Por fim, para os dois projetos, avaliamos o intervalo entre a divulgação de uma vulnerabilidade e sua correção, além do tempo até a publicação de uma atualização (tempo para corrigir e tempo para lançar uma versão) em cada caso.

Projeto principal do Angular: visão geral das vulnerabilidades de segurança

Ao analisar os projetos principais do Angular, investigamos especificamente as vulnerabilidades de segurança do ramo v1.x, também conhecido como AngularJS. O AngularJS é a versão desatualizada do Angular mais usada e teve suporte e manutenção oficiais até 30 de junho de 2021 — AngularJS 1.7 LTS.

Criamos um gráfico com o número mensal de downloads dos pacotes npm angular e @angular/core, que representam, respectivamente, o Angular v1.x e o Angular v2.0 e versões posteriores. De acordo com os dados analisados, o Angular v1.x ainda tem uma participação considerável no mercado do Angular, representando 28% dos downloads de todas as versões. Embora o Angular tenha lançado muitas versões principais desde a 1.x, os usuários continuam baixando essa versão antiga milhões de vezes por mês.

Gráfico de linhas que mostra downloads do Angular v1.x entre 1,5 e 2 milhões, enquanto as versões mais recentes sobem de 3 para 5,3 milhões, de junho de 2018 a julho de 2019.

O gráfico acima mostra como as versões Angular 1.x são populares em comparação com as outras opções do Angular: as versões 2.0 e posteriores do Angular estão representadas em conjunto pela linha amarela. Como podemos ver, o Angular v1.x sozinho representa cerca de um terço (28%, para ser exato) de todos os downloads de Angular, entre versões novas e antigas.

Podemos supor que o uso contínuo das versões Angular 1.x se deve a aplicações legadas que ainda recebem manutenção em empresas de médio e grande porte. Para essas organizações, mudar de tecnologia e migrar pode custar muito caro, mas as aplicações ainda precisam passar por manutenção e ser atualizadas regularmente.

Essa suposição reforça ainda mais a necessidade fundamental de monitorar vulnerabilidades de segurança em componentes de código aberto, como o framework Angular, inclusive nas versões antigas. Assim, é possível corrigir rapidamente as vulnerabilidades identificadas em aplicações em produção e evitar que se agravem e comprometam a postura de segurança da empresa ao longo do tempo.

Considerando esses problemas, encontramos ao todo 19 vulnerabilidades em seis ramos de lançamento diferentes do Angular v1.x, distribuídas entre versões secundárias conforme o gráfico abaixo.

Gráfico de barras das vulnerabilidades do Angular 1.x por versão: 1.1 tem 1, 1.2 tem 4, 1.3 tem 3, 1.4 tem 1, 1.5 tem 7 e 1.6 tem 3.

Angular e React: bons bancos de dados de vulnerabilidades são essenciais para identificar problemas de segurança

Embora a Snyk tenha monitorado vinte e três vulnerabilidades de segurança do Angular v1.x, nenhuma delas tem uma referência CVE, pois não foi divulgada por nenhum dos programas CVE oficialmente reconhecidos. Isso não significa necessariamente uma falha do Angular: é uma prática comum, já que o CVE foi criado pensando em fornecedores comerciais, e registrar uma vulnerabilidade exige bastante tempo e experiência — algo que nem sempre funciona bem no universo do código aberto.

Sem um CVE, as vulnerabilidades só podem ser monitoradas por analistas especializados que acompanham as atividades de código aberto com métodos personalizados; poucas soluções oferecem essa possibilidade.

Ferramentas como npm audit monitoram algumas vulnerabilidades, mas também deixam passar muitas das que não têm CVE. Por exemplo, o npm audit, incluído por padrão no cliente npm, infelizmente não detecta nenhuma das vinte e três vulnerabilidades do Angular v1.x nem as vulnerabilidades do React. Por isso, confiar no npm audit pode dar aos desenvolvedores uma falsa sensação de segurança.

Terminal mostrando o npm instalando angular@1.2.32, auditando um pacote e encontrando zero vulnerabilidades.

Em contrapartida, o banco de dados de vulnerabilidades da Snyk para Angular 1.x, por exemplo, informa onze relatórios de segurança e onze vulnerabilidades de segurança para o Angular v1.2.32:

Versão

Publicado em

Licença

Vulnerabilidades diretas

angular 1.6.0-rc.1


(pré-lançamento)


21 nov. 2016

MIT

3 moderadas


angular 1.6.0-rc.0


(pré-lançamento)


27 out. 2016


MIT


3 moderadas


11 out. 2016


MIT


6 moderadas


11 out. 2016


MIT

3 críticas
7 moderadas
1 baixa

Vamos analisar os resultados da verificação da Snyk para um projeto Angular:

Terminal exibindo um relatório de auditoria do npm para Angular, destacando uma vulnerabilidade de script entre sites de alta gravidade e orientações para corrigi-la.

Essas vulnerabilidades são apresentadas na interface da Snyk ou na CLI da Snyk. Além disso, a interface da Snyk cria automaticamente PRs de correção para atualizar pacotes vulneráveis, usando integrações com sistemas como o GitHub.

A situação do React é semelhante: o npm audit não detecta nenhuma das três vulnerabilidades relacionadas ao React. Das três vulnerabilidades conhecidas publicamente (duas que afetam a biblioteca principal react e uma que afeta a biblioteca principal react-dom), apenas a última tem um CVE registrado no National Vulnerability Database (https://nvd.nist.gov).

Saída do terminal mostrando a instalação de pacotes do React pelo npm, a auditoria de 29 pacotes e a identificação de 0 vulnerabilidades

Projeto principal do React: visão geral

Para este relatório, consideramos as bibliotecas react, react-dom e prop-types como os módulos “principais” do React, pois, juntas, elas costumam formar a base das aplicações Web criadas com React.

Encontramos três vulnerabilidades nesses módulos principais: duas no react e uma no react-dom.

As três são vulnerabilidades de Cross-Site Scripting (XSS). As duas vulnerabilidades de XSS no pacote npm do React são antigas: uma afeta as versões 0.5.x, que remontam a 2013, e a outra, as versões anteriores à 0.14, divulgadas em 2015.

Por outro lado, a vulnerabilidade de XSS no react-dom, no ramo de lançamento v16.x, é relativamente recente e foi divulgada há pouco mais de um ano, em agosto de 2018. No entanto, essa vulnerabilidade só ocorre quando outras condições também estão presentes, como o uso da biblioteca react-dom em um contexto de renderização no servidor. Ainda assim, recomendamos manter tudo atualizado com as correções de segurança e atualizar os componentes de código aberto o quanto antes, para evitar riscos de segurança desnecessários.

Em destaque: Preact — uma alternativa ao React

Além dessas três vulnerabilidades do projeto principal do React, também monitoramos uma vulnerabilidade de segurança de gravidade moderada de desserialização de dados não confiáveis no Preact. Como muitos desenvolvedores preferem o Preact ao React por ser mais leve e rápido, achamos que valia a pena investigá-lo melhor. Essa vulnerabilidade de gravidade moderada do Preact afeta as versões do ramo de pré-lançamento 10.0.0, de março e abril de 2019.


Recomendamos muito que você baixe a versão completa do relatório em formato digital. Também disponibilizamos as seguintes seções gerais como publicações no blog:

Leia mais

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 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

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.