Scanner: cierre del audit de dependencias frontend — noche del 19 octubre 2026¶
Preparado en fuente para revisión y publicación por el coordinador. No se ha hecho commit/push, desplegado archivos, construido/recreado imágenes ni tocado el runtime de scanner, descargas, ARR o TV. Sustituye el pendiente de ocho paquetes del informe anterior.
Resultado: npm audit del árbol fuente completo devuelve0 vulnerabilidades. Esto no significa cero vulnerabilidades en la imagen/runtime. El contenedor sigue con las dependencias y assets anteriores; no se modificó ningún servicio.
Elección mínima compatible¶
Se conservaron ramas mayores para Vue/PostCSS/nanoid/Rollup; Vite5 requiere cambiar de major porque los advisories no ofrecen arreglo en5. Se eligió Vite6.4.3 con backports de seguridad, compatible con Node20 del Dockerfile, en lugar del salto a8 sugerido automáticamente por npm. Plugin-vue4 declara compatibilidad con Vite5; plugin5.2.4 admite explícitamente Vite5 y6. Esta combinación se instaló y compiló en copia temporal antes de incorporarla.
| Dependencia | Antes | Lock preparado | Tipo/razón |
|---|---|---|---|
| vue y nueve paquetes @vue | 3.5.26 | 3.5.42 | Patch, corrige server-renderer |
| @vitejs/plugin-vue | 4.6.2 | 5.2.4 | Major necesario para peerVite6 |
| vite | 5.4.21 | 6.4.3 | Major mínimo con backports pertinentes |
| esbuild | 0.21.5 | 0.25.12 | Dependencia de Vite6, rama con arreglo |
| postcss | 8.5.6 | 8.5.31 | Patch, corrige familia de advisories |
| nanoid | 3.3.11 | 3.3.20 | Patch transitivo de PostCSS |
| rollup | 4.53.5 | 4.59.1 | Minor, rama mínima parcheada4.59 |
| source-map-js | 1.2.1 en HEAD | 1.2.2 | Conserva arreglo anterior |
Manifiesto directo: vue^3.5.42, plugin-vue^5.2.4 y vite^6.4.3. No se añaden dependencias directas ni overrides. Vue3.5.42 exige Babel parser^7.29.8 y entities^7.0.1; sus dependencias se actualizan dentro de ramas compatibles. Vite6 añade fdir, picomatch y tinyglobby para su resolución de archivos. Se conserva sourcemap-codec1.5.5 al comprobar que el rango seguía admitiéndolo. No se actualiza a Vue3.6, Vite7/8 ni plugin-vue6.
El diff del lock tiene517altas/318bajas por metadatos y distribución de binarios:76versiones nuevas/cambiadas, de ellas51son variantes opcionales por plataforma de esbuild/Rollup. No es un barrido de otros servicios. Se han comprobado todos los resolved: HTTPS y dominio registry.npmjs.org, sin usuario/credenciales, file:, rutas temporales ni registries ajenos.
Fuentes primarias y alcance¶
- Vue SSR, GHSA-g2v6-rqmx-r4w6: arreglo3.5.42. El módulo afectado renderiza atributos en servidor; scanner es SPA estática sobre Python, sin Vue SSR observado. Actualizar Vue sí cambia código cliente servido, aunque este advisory sea de server-renderer.
- Vite .map traversal, UNC/launch-editor y Windows fs.deny: afectan servidor de desarrollo y, en los dos últimos, Windows. La rama6 incorpora esos arreglos; no hay servidor Vite en el runtime Python observado.
- esbuild dev server: problema del servidor de desarrollo, no de entregar los archivos compilados.
- Rollup traversal: corregido4.59.0, riesgo de escritura durante compilación con entradas controladas por atacante. Se usa4.59.1, sin cambiar de rama mayor.
- PostCSS: CSS stringify, sourceMappingURL, arreglo incompleto y path traversal. Son riesgos al procesar CSS/mapas no confiables, fase build en este proyecto.
- Nanoid: tamaño negativo, tamaño cero e integer overflow. Lo incorpora PostCSS para compilación; no se añade uso a la aplicación.
- Compatibilidad revisada con migración oficial Vite5→6 y metadatos del registro para engines/peers. No usa Sass, SSR, configuración JSON especial ni APIs internas de Vite que requieren adaptación; vite.config.js y App.vue permanecen idénticos.
Validación¶
Candidato definitivo con instalación limpia real: npm ci --ignore-scripts
--no-audit --no-fund,34paquetes. Lock/manifiesto copiados a la fuente coinciden
byte a byte con los de esta prueba. No se ejecuta audit fix ni se ignoran alertas.
Build real bajo Node20.20.2 (npm exec --package=node@20 -- node
node_modules/vite/bin/vite.js build), npm11.19.1 como instalador, macOS arm64:
10módulos compilados, salida index/CSS/JS correcta. También se probó build en
Node26 durante evaluación inicial. npm ls directo y transitivo no presenta
peers inválidos; source-map-js1.2.2 único y deduplicado.
Audit completo final con npm audit --package-lock-only --json: exit0,
info0/low0/moderate0/high0/critical0/total0. Sintaxis del JS generado comprobada
por node --check en Node20; todas las referencias assets del HTML resuelven.
git diff --check pasa. No se ha hecho prueba de navegador interactivo ni
backend, ni build completo Linux/Alpine de la imagen: queda antes de un eventual
despliegue. Las35pruebas Python de preservación ya pasaron en la ronda anterior;
scanner.py, arrapi.py y su Dockerfile siguen con los mismos hashes.
El JS pasa de76910aprox a79856B (~3KB adicionales), CSS10692B y HTML437B. Los assets sí cambian respecto al runtime, debido a Vue/compiler/minificador. No se afirma equivalencia byte a byte para este segundo cambio.
| Archivo nuevo | SHA256 |
|---|---|
| index.html | <REDACTED> |
| assets/index-BSPFD_pJ.js | <REDACTED> |
| assets/index-BZonGvV1.css | <REDACTED> |
Entrega, publicación y reversión¶
Únicos archivos stacks editados: frontend/package.json y package-lock.json. Hashes preparados:
- package.json:
<REDACTED>. - package-lock.json:
<REDACTED>.
El coordinador puede revisar y publicar estos dos archivos en master, con este informe en main de infra. Publicarlos no cambia el runtime scanner. Para revertir solo el hardening, recuperar package.json previo y lock con source-map-js1.2.2 del informe anterior, no el lock vulnerable de HEAD inicial. Si se decide construir una imagen más adelante, preservar custom app.py/arrapi.py/cleanup y journals: el Dockerfile custom actual no recompila el frontend y el upstream no sustituye por sí solo a la aplicación custom. No iniciar descargas como prueba.
Publicación confirmada por coordinador¶
Publicado stacks master 1390e77. Consulta posterior a la API de GitHub:
Dependabot33, package source-map-js, state=fixed, fixed_at2026-10-19T21:50:25Z.
No se hicieron cambios de runtime. Esta confirmación supera el estado inicial
de preparación descrito al comienzo del informe.