Cómo funciona esta comprobación
Scanaris reúne el HTML de tu página principal y descarga hasta quince de sus scripts: todos los que se sirven desde tu propio dominio y, de los externos, los que llevan "jquery" en la ruta. En ese texto busca las cabeceras de versión que las librerías incluyen al principio del fichero. Tres casos abren hallazgo, todos de severidad media. jQuery anterior a 3.5.0: vulnerabilidades XSS conocidas (CVE-2020-11022 y CVE-2020-11023) en la forma en que procesa HTML. AngularJS, cualquier versión 1.x: el framework llegó al fin de su vida en enero de 2022 y no recibe parches de seguridad. Bootstrap 3.x anterior a 3.4.1 o 4.x anterior a 4.3.1: XSS a través de atributos data- en tooltips y popovers (CVE-2019-8331). Solo marca cuando encuentra el número de versión escrito; si el fichero está minificado sin cabecera, no adivina.
Por qué importa
Una vulnerabilidad de XSS en una librería que carga toda tu web es una puerta abierta en todas las páginas a la vez: un atacante que consiga meter texto donde la librería lo interprete como HTML (un comentario, un nombre de perfil, un parámetro de URL) ejecuta JavaScript con la sesión de quien lo ve. Para estas tres librerías los fallos son públicos desde hace años, con ejemplos de explotación publicados, y las herramientas automáticas los prueban de serie. El caso de AngularJS es distinto pero peor a largo plazo: no es que tenga un fallo concreto, es que el siguiente que aparezca no se va a corregir nunca.
Por qué pasa
Porque funcionan. Una jQuery 1.12 de 2016 sigue haciendo lo que hacía y nadie la toca por miedo a romper algo. Los temas y plugins de WordPress son el caso típico: el núcleo de WordPress lleva jQuery 3.7 desde la versión 5.6, pero un tema antiguo puede cargar su propia copia. También aparece en plantillas HTML compradas, en paneles de administración heredados y en proyectos donde la IA copió un ejemplo con una URL de CDN de hace años.
Cómo arreglarlo
- jQuery: actualiza a la última 3.x (la 3.7 es la rama actual). Cambia la URL del CDN o el fichero local, y carga
jquery-migratedurante unos días para que te avise en consola de las llamadas antiguas que haya que adaptar. Prueba los formularios, los menús y cualquier plugin de jQuery que uses. - Bootstrap: si estás en 3.x, pasa a 3.4.1, que es compatible; si estás en 4.x, a 4.6.2. Son versiones de mantenimiento sin cambios de diseño. Saltar a 5.x es una migración mayor porque elimina jQuery y renombra clases; planifícala aparte.
- AngularJS: no hay versión segura a la que subir. Las opciones son migrar (a Angular moderno, Vue o React, por partes si la app es grande), contratar soporte extendido comercial mientras tanto, o aislar la app: sin datos sensibles, detrás de autenticación y con una CSP estricta.
- WordPress: actualiza el tema y los plugins; si uno de ellos sigue cargando una jQuery vieja, cámbialo. No desactives la jQuery del núcleo para "ahorrar": es la versión buena.
- En general: instala las librerías con npm en lugar de copiar URL de CDN, y activa las alertas de dependencias de GitHub o
npm auditpara enterarte de la siguiente.
Comprueba que está arreglado
curl -s https://tudominio.com | grep -oE 'src="[^"]*(jquery|bootstrap|angular)[^"]*"'
curl -s URL_DEL_SCRIPT | head -c 400 | grep -oE '(jQuery|Bootstrap|AngularJS)[^0-9]{0,30}v?[0-9]+\.[0-9]+\.[0-9]+'
La primera te dice qué ficheros carga tu web; la segunda, con la URL de cada uno, la versión que declaran. Esperado: jQuery 3.5.0 o superior, Bootstrap 3.4.1, 4.3.1 o superior, y ningún AngularJS.
Preguntas frecuentes
¿Solo se detectan estas tres librerías?
De momento, sí: son las que concentran la mayoría de las vulnerabilidades explotadas en el front-end de webs reales. Para el resto de tus dependencias, npm audit o las alertas de GitHub cubren lo que un escaneo externo no puede ver.
Uso jQuery 1.12 pero no inserto HTML de usuarios. ¿Estoy a salvo?
Mientras nadie pase texto no confiable por .html(), .append() o similares, el fallo concreto no se dispara. Pero es difícil garantizarlo en toda la web y en todos los plugins, y la actualización a 3.x suele costar una tarde. Mientras tanto, una CSP estricta limita el daño; la revisa CSP débil.
¿Y si la librería viene de un CDN?
Entonces, además de actualizarla, fija la versión y añade integrity para que nadie pueda cambiarla por debajo; lo explica integridad de subrecursos.