Como funciona esta verificação
O Scanaris reúne o HTML da tua página principal e descarrega até quinze dos seus scripts: todos os que são servidos a partir do teu próprio domínio e, dos externos, os que levam "jquery" no caminho. Nesse texto procura os cabeçalhos de versão que as bibliotecas incluem no início do ficheiro. Três casos abrem achado, todos de severidade média. jQuery anterior a 3.5.0: vulnerabilidades XSS conhecidas (CVE-2020-11022 e CVE-2020-11023) na forma como processa HTML. AngularJS, qualquer versão 1.x: a framework chegou ao fim de vida em janeiro de 2022 e não recebe correções de segurança. Bootstrap 3.x anterior a 3.4.1 ou 4.x anterior a 4.3.1: XSS através de atributos data- em tooltips e popovers (CVE-2019-8331). Só marca quando encontra o número de versão escrito; se o ficheiro está minificado sem cabeçalho, não adivinha.
Porque importa
Uma vulnerabilidade de XSS numa biblioteca que todo o teu site carrega é uma porta aberta em todas as páginas ao mesmo tempo: um atacante que consiga meter texto onde a biblioteca o interpreta como HTML (um comentário, um nome de perfil, um parâmetro de URL) executa JavaScript com a sessão de quem o vê. Para estas três bibliotecas as falhas são públicas há anos, com exemplos de exploração publicados, e as ferramentas automáticas testam-nas de série. O caso do AngularJS é diferente mas pior a longo prazo: não é que tenha uma falha concreta, é que a próxima que aparecer nunca vai ser corrigida.
Porque acontece
Porque funcionam. Um jQuery 1.12 de 2016 continua a fazer o que fazia e ninguém lhe toca com medo de partir algo. Os temas e plugins de WordPress são o caso típico: o núcleo do WordPress traz o jQuery 3.7 desde a versão 5.6, mas um tema antigo pode carregar a sua própria cópia. Também aparece em templates HTML comprados, em painéis de administração herdados e em projetos onde a IA copiou um exemplo com um URL de CDN de há anos.
Como corrigir
- jQuery: atualiza para o último 3.x (o 3.7 é o ramo atual). Muda o URL da CDN ou o ficheiro local, e carrega o
jquery-migratedurante uns dias para que te avise na consola das chamadas antigas que há que adaptar. Testa os formulários, os menus e qualquer plugin de jQuery que uses. - Bootstrap: se estás em 3.x, passa para 3.4.1, que é compatível; se estás em 4.x, para 4.6.2. São versões de manutenção sem mudanças de design. Saltar para 5.x é uma migração maior porque elimina o jQuery e renomeia classes; planeia-a à parte.
- AngularJS: não há versão segura para a qual subir. As opções são migrar (para Angular moderno, Vue ou React, por partes se a app for grande), contratar suporte alargado comercial entretanto, ou isolar a app: sem dados sensíveis, atrás de autenticação e com uma CSP estrita.
- WordPress: atualiza o tema e os plugins; se um deles continuar a carregar um jQuery velho, troca-o. Não desatives o jQuery do núcleo para "poupar": é a versão boa.
- Em geral: instala as bibliotecas com npm em vez de copiar URL de CDN, e ativa os alertas de dependências do GitHub ou o
npm auditpara saberes da próxima.
Confirma que está corrigido
curl -s https://teudominio.com | grep -oE 'src="[^"]*(jquery|bootstrap|angular)[^"]*"'
curl -s URL_DO_SCRIPT | head -c 400 | grep -oE '(jQuery|Bootstrap|AngularJS)[^0-9]{0,30}v?[0-9]+\.[0-9]+\.[0-9]+'
O primeiro diz-te que ficheiros o teu site carrega; o segundo, com o URL de cada um, a versão que declaram. Esperado: jQuery 3.5.0 ou superior, Bootstrap 3.4.1, 4.3.1 ou superior, e nenhum AngularJS.
Perguntas frequentes
Só se detetam estas três bibliotecas?
De momento, sim: são as que concentram a maioria das vulnerabilidades exploradas no front-end de sites reais. Para o resto das tuas dependências, o npm audit ou os alertas do GitHub cobrem o que uma análise externa não consegue ver.
Uso jQuery 1.12 mas não insiro HTML de utilizadores. Estou a salvo?
Enquanto ninguém passar texto não confiável por .html(), .append() ou semelhantes, a falha concreta não dispara. Mas é difícil garanti-lo em todo o site e em todos os plugins, e a atualização para 3.x costuma custar uma tarde. Entretanto, uma CSP estrita limita o dano; revê-a CSP fraca.
E se a biblioteca vier de uma CDN?
Então, além de a atualizares, fixa a versão e adiciona integrity para que ninguém a possa trocar por baixo; explica-o integridade de sub-recursos.