Escaneo ZAP Básico - target-domain.example.com
Herramienta: OWASP ZAP (escaneo básico) Objetivo: https://target-domain.example.com Resultado general: LIMPIO — sin vulnerabilidades criticas ni altas
- Resumen
| Metrica | Valor |
|---|---|
| Peticiones totales | 18 |
| Alertas criticas | 0 |
| Alertas altas | 0 |
| Alertas medias | 8 |
| Alertas bajas | 1 |
| Códigos de respuesta | Todos 200 OK |
- Alertas medias (8) — Todas informativas / falsos positivos
1. Comentarios HTML en respuestas (6 recursos)
ZAP marca la presencia de comentarios HTML como severidad media.
Recursos afectados:
target-domain.example.com/(página principal, 23KB)fonts.gstatic.com/...ibmplexsans...woff2(x2)fonts.gstatic.com/...ibmplexmono...woff2
Evaluación: Los comentarios HTML son generados por Quartz al compilar el contenido. No exponen información sensible (no hay credenciales, rutas internas, ni configuración). Es comportamiento normal de un sitio estático generado por SSG.
Acción: Ninguna requerida. Se puede considerar eliminar comentarios HTML del output de Quartz en builds de producción si se quiere una superficie más limpia en futuros escaneos.
2. Script vacio: prescript.js
- URL:
https://target-domain.example.com/prescript.js - Código: 200 OK
- Tamaño del cuerpo: 0 bytes
Evaluación: Es un placeholder de Quartz que se carga antes del contenido principal. ZAP lo marca porque un script que devuelve 200 pero está vacio puede indicar configuración incorrecta. En este caso es intencional — Quartz genera este archivo vacio para la fase de pre-renderizado.
Acción: Ninguna requerida. Funcionamiento correcto de Quartz.
3. Script grande: postscript.js
- URL:
https://target-domain.example.com/postscript.js - Código: 200 OK
- Tamaño del cuerpo: 113,933 bytes (111 KB)
Evaluación: ZAP marca scripts grandes como potencialmente analizables. Es el JavaScript compilado de Quartz que contiene toda la lógica del sitio (SPA navigation, explorer, search, darkmode, etc.). No es una vulnerabilidad.
Acción: Considerar minificación más agresiva o code splitting en futuras optimizaciones, pero no es un problema de seguridad.
4. CSS grande: index.css
- URL:
https://target-domain.example.com/index.css - Código: 200 OK
- Tamaño del cuerpo: 39,569 bytes (39 KB)
Evaluación: Similar al postscript.js, ZAP marca recursos grandes. Es el CSS compilado de Quartz con todos los estilos del sitio.
Acción: Ninguna requerida.
5. Feed RSS externo: api.rss2json.com
- URL:
https://api.rss2json.com/v1/api.json?rss_url=...TheHackersNews - Código: 200 OK
- Tamaño: 15,646 bytes
- Tags: JSON
Evaluación: ZAP marca llamadas a APIs externas. Está permitido en la CSP (connect-src incluye api.rss2json.com y api.codetabs.com). Es el feed de noticias del homepage.
Acción: Ninguna requerida. Dominio explicitamente permitido en CSP.
- Alerta baja (1) — Irrelevante
6. Extensión de Firefox (newtab.xpi)
- URL:
https://archive.mozilla.org/pub/system-addons/newtab/newtab-151.4.0-build1/newtab.xpi - Tamaño: 1,908,141 bytes (1.8 MB)
Evaluación: Esto es ZAP cargando una extensión del navegador Firefox, no es tráfico del sitio target-domain.example.com. Es un artefacto del escaneo, no una vulnerabilidad.
Acción: Ignorar completamente.
- Recursos estaticos cargados (sin alertas)
Los siguientes recursos se cargaron correctamente sin generar alertas:
-
katex@0.16.11/dist/contrib/copy-tex.min.js(1,673 bytes) — CDN jsdelivr con SRI -
katex@0.16.11/dist/katex.min.css(23,335 bytes) — CDN jsdelivr con SRI -
static/contentIndex.json(548,024 bytes) — Índice de contenido del Explorer -
fonts.googleapis.com/css2?family=IBM+Plex+...(16,003 bytes) — Fuentes web -
api.rss2json.com/...cisa.gov/news.xml(4,106 bytes) — Feed CISA -
api.rss2json.com/...krebsonsecurity.com/feed/(91,204 bytes) — Feed Krebs -
CSP activa durante el escaneo
default-src 'self';
script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src https://fonts.gstatic.com;
img-src 'self' data: https://example.com https://docs.example.com https://blogger.com https://bp.blogspot.com https://images.amazon.com;
connect-src 'self' https://api.rss2json.com https://api.codetabs.com;
frame-src 'none';
object-src 'none';
base-uri 'self';
form-action 'self';
upgrade-insecure-requests;
-
Headers de seguridad (inyectados por CF + _headers)
-
Content-Security-Policy: (ver arriba)
-
Cross-Origin-Opener-Policy: same-origin
-
Cross-Origin-Resource-Policy: same-site
-
X-Permitted-Cross-Domain-Policies: none
-
X-Download-Options: noopen
-
Referrer-Policy: strict-origin-when-cross-origin
-
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()
-
X-Frame-Options, X-Content-Type-Options, Strict-Transport-Security, X-XSS-Protection: inyectados automáticamente por Cloudflare
-
Conclusión
El escaneo básico de ZAP no revela vulnerabilidades explotables. Las 8 alertas medias son informativas (comentarios HTML, recursos grandes, APIs externas permitidas por CSP). La única alerta baja es un artefacto del navegador de ZAP.
Evaluación de seguridad del blog post-hardening: 8.5/10
Perdida de puntos por:
unsafe-inlineen script-src y style-src (necesario para Quartz, no eliminable sin refactor)- Comentarios HTML en output (informativo, no explotable)
- Mermaid sin SRI (usa dynamic import, no soporta integrity)
Recomendaciones futuras:
- Escaneo ZAP completo (active scan) para validar más a fondo
- Considerar eliminación de comentarios HTML en producción
- Considerar code splitting para reducir tamaño de postscript.js