Skip to content

Scanner: parche acotado de source-map-js — noche del 19 octubre 2026

Preparado localmente para revisión del coordinador. Sin commit/push, despliegue, recreación, pull de imágenes ni ejecución de scanner/hunter/limpiadores. La lectura remota se limita a inspect con campos seleccionados, hashes, metadatos Git y comprobaciones de archivos del contenedor. No se consultaron ni activaron API de descargas, TV, Put.io o ARR.

Cambio y fuente primaria

Dependabot33 apunta a homelab-stacks/custom/plundrio/upstream/scanner/frontend/package-lock.json. Se sustituyen únicamente version, resolved e integrity de node_modules/source-map-js: 1.2.1 → 1.2.2. package.json y todos los demás bloques del lock permanecen idénticos, comprobado comparando JSON completo con HEAD. Las dependencias actuales de Vue compiler y PostCSS admiten ^1.2.1; 1.2.2 satisface esos rangos sin overrides ni nuevas dependencias directas.

Advisory GHSA-68fv-2mgg-jv7q identifica versiones >=1.0.0 y <1.2.2, con denegación de servicio al procesar source maps indexados maliciosos. El mantenedor documenta la corrección en release1.2.2 y PR79. URL de tarball e integrity se obtuvieron del registro oficial1.2.2, sin construir manualmente el hash de integridad del paquete.

Fuente frente a runtime

Checkout local stacks: master, HEAD inicial 6b4f72d; limpio antes del cambio. Checkout de VM208: HEAD <REDACTED>, sin cambios locales bajo custom/plundrio. No se resetea ni actualiza ese checkout.

El scanner activo usa media-plundrio-scanner:cleanup-20260911, imagen sha256:<REDACTED>. Su Compose construye desde /home/monxas/plundrio-review-20260911 y el Dockerfile custom hereda media-plundrio-scanner:before-polish-20260911, copiando solo scanner.py→/app/app.py y arrapi.py→/app/plundrio_shared/arrapi.py. Reconstruir ese Dockerfile no reconstruye el frontend de upstream ni aplica este lock.

El Dockerfile upstream separa compilación Node de imagen Python final y copia solo static al runtime. En el contenedor observado no existe comando node, no hay /app/node_modules y no se encontraron node_modules bajo /app (profundidad3), ni archivos .map en static. Los tres archivos estáticos producidos con el lock parcheado son idénticos byte a byte al build baseline y a los tres del contenedor. Esto sustenta que el módulo afectado pertenece al flujo de compilación observado; no demuestra inexistencia de otras vulnerabilidades en la imagen completa. No es necesario recrear el scanner activo para publicar este arreglo de fuente. No se ha construido imagen nueva: hacerlo con upstream sin integrar el custom app.py perdería las protecciones de cleanup, journals e idempotencia.

Hashes local, contexto real de build remoto y código dentro del contenedor coinciden:

  • scanner.py/app.py: <REDACTED>.
  • arrapi.py: <REDACTED>.
  • Dockerfile custom (local/contexto remoto): <REDACTED>.

Lock previo local y remoto: <REDACTED>. Lock corregido: <REDACTED>.

Validación real y límites

Instalación y build realizados en un directorio temporal aislado, con Node26.9.0, npm11.19.1, Vue3.5.26 y Vite5.4.21. No se usó el Node20 del Dockerfile ni se construyó una imagen completa; el build Linux/Node20 queda fuera de esta prueba.

  • npm ci --ignore-scripts --no-audit --no-fund: correcto,31paquetes.
  • npm run build: correcto,10módulos, HTML/CSS/JS generados.
  • npm ls source-map-js: una única1.2.2 deduplicada, usada por PostCSS y Vue compiler.
  • Build baseline con lock original y build corregido: los tres archivos son idénticos byte a byte. El segundo build usa salida separada para comparar.
  • Comprobación local del paquete parcheado: un indexed section offset.line=1e8 se rechaza con excepción; no se ejecuta la prueba contra la versión vulnerable.
  • Pruebas existentes de seguridad/reintentos del scanner: 35 pasan, con HTTP de prueba únicamente en127.0.0.1 y filesystem sintético. La primera ejecución falló al importar requests ausente en Python local; se creó venv temporal con requests y se repitió toda la suite correctamente, sin cambiar el sistema.
  • git diff --check: correcto; único cambio stacks: tres líneas del lock.

Hashes estáticos comunes a baseline, build corregido y runtime:

Archivo SHA256
index.html <REDACTED>
assets/index-LWl0UuAA.js <REDACTED>
assets/index-qMvYT-TO.css <REDACTED>

npm audit --package-lock-only --json ya no contiene source-map-js. No pasa el audit completo: reporta8paquetes,6high y2moderate; nombres: @vitejs/plugin-vue, @vue/server-renderer, esbuild, nanoid, postcss, rollup, vite y vue. No se han actualizado esos paquetes. Algunas correcciones propuestas por npm implican major de Vite/plugin y requieren otro cambio revisado. Son resultados del audit consultado, no evidencia de explotación ni alcance en este runtime estático. No se ejecutó audit fix.

Siguiente paso del coordinador

Revisar el diff de tres líneas, incorporar únicamente el lock y este informe a master/main respectivos y publicar sin tocar el contenedor. Confirmar después que Dependabot33 se cierra contra la rama por defecto. Si se decide reconstruir frontend/imagen posteriormente, integrar desde fuentes custom actuales y repetir los35tests; no sustituir scanner.py por upstream ni ejecutar cleanup como smoke test. Este trabajo no autoriza recreación de los servicios de descargas.

Fuente separada plundrio-ecosystem: Rollup, 22 octubre

La PR14 de monxas/plundrio-ecosystem se integró a las 20:37:10 UTC como main <REDACTED>. Es un repositorio distinto del checkout de homelab-stacks y del ~/Dev/plundrio de paulirish; ambos se conservaron intactos. No se atribuye esta actualización al runtime custom descrito arriba.

Sólo cambia scanner/frontend/package-lock.json: Rollup 4.63.3 → 4.63.5 y sus paquetes opcionales de plataforma, 26 entradas en total. La comparación JSON completa confirma que sólo cambian version, resolved, integrity y las referencias de optionalDependencies de Rollup; package.json y los demás paquetes permanecen idénticos. Las descargas siguen apuntando al registro npm. El changelog oficial describe correcciones de lifecycle/watch y ejecuciones solapadas; no se presenta como un arreglo de fallo observado en la aplicación productiva.

Validación aislada en Mac: Node 26.9.0 y npm 11.19.1, npm ci --ignore-scripts --no-audit --no-fund correcto (31 paquetes) y npm run build correcto con Vite 5.4.21. Un preload de Node bloqueaba net.Socket.connect y dgram.Socket.send; no era un firewall para los subprocesos nativos. No se abrió un navegador o devserver ni se consultaron proveedores. Resolución comprobada: Rollup 4.63.5 y esbuild 0.21.5. Lock antes/después y en main idéntico, SHA256 <REDACTED>.

No hay checks GitHub ni workflows de build/publicación en la fuente de este repositorio; no se omitió una CI existente. La automatización externa no se ha acreditado. Node 26 satisface el rango de Vite, pero la imagen del Dockerfile usa Node 20-alpine: no se ha probado una compilación Linux con esa imagen. Tampoco se ejecutó un audit completo, se publicó una imagen o se desplegó Scanner/Hunter. Su transición de runtime permanece separada; no se actualizó el checkout de producción ni se recrearon procesos con trabajo en vuelo.

Recibo local plundrio-rollup14-validation-9e4vo239/proof.json, SHA256 <REDACTED>. Artefactos, node_modules y caché privados de esta prueba retirados después; worktree de fuente limpio y recibo original conservado. Limpieza registrada por separado en cleanup.json, SHA256 <REDACTED>.