Cabeceras de seguridad

Las cabeceras de seguridad en HTTP son directivas adicionales que se añaden a las respuestas HTTP de un servidor web para mejorar la seguridad de las aplicaciones web. Estas cabeceras pueden prevenir una variedad de ataques al configurar cómo los navegadores deben manejar las respuestas del servidor.

Principales Cabeceras de Seguridad

  1. Content-Security-Policy (CSP)

    • Descripción: Controla qué recursos (scripts, estilos, imágenes, etc.) pueden ser cargados y ejecutados por el navegador. Previene ataques de inyección como XSS (Cross-Site Scripting).

    • Ejemplo:

      Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted.cdn.com
  2. X-Content-Type-Options

    • Descripción: Previene que los navegadores interpreten incorrectamente los tipos MIME, mitigando ataques de tipo MIME sniffing.

    • Ejemplo:

      X-Content-Type-Options: nosniff
  3. Strict-Transport-Security (HSTS)

    • Descripción: Fuerza a los navegadores a utilizar únicamente HTTPS para las conexiones futuras, previniendo ataques man-in-the-middle (MITM).

    • Ejemplo:

      Strict-Transport-Security: max-age=31536000; includeSubDomains
  4. X-Frame-Options

    • Descripción: Controla si un sitio puede ser incrustado en un iframe. Previene ataques de clickjacking.

    • Ejemplo:

      X-Frame-Options: DENY
  5. X-XSS-Protection

    • Descripción: Habilita la protección contra XSS en navegadores compatibles.

    • Ejemplo:

      X-XSS-Protection: 1; mode=block
  6. Referrer-Policy

    • Descripción: Controla la información de referencia que se envía junto con las solicitudes HTTP, protegiendo datos sensibles en las URLs.

    • Ejemplo:

      Referrer-Policy: no-referrer
  7. Permissions-Policy

    • Descripción: Regula qué características y APIs pueden ser utilizadas en el navegador, como geolocalización, cámara, micrófono, etc.

    • Ejemplo:

      Permissions-Policy: geolocation=(), microphone=(), camera=()

Riesgos por la Ausencia de Cabeceras de Seguridad

  1. Cross-Site Scripting (XSS)

    • Riesgo: Sin Content-Security-Policy, los sitios son más vulnerables a inyecciones de scripts maliciosos que pueden robar datos sensibles o realizar acciones no autorizadas en nombre del usuario.

  2. MIME Sniffing

    • Riesgo: Sin X-Content-Type-Options, los navegadores pueden interpretar incorrectamente los tipos de contenido, permitiendo la ejecución de scripts maliciosos.

  3. Clickjacking

    • Riesgo: Sin X-Frame-Options, un atacante puede incrustar el sitio en un iframe en otro dominio y engañar a los usuarios para que realicen acciones no deseadas.

  4. Man-in-the-Middle (MITM)

    • Riesgo: Sin Strict-Transport-Security, los usuarios pueden ser susceptibles a ataques MITM si son redirigidos a versiones HTTP inseguras del sitio.

  5. Exposición de Información Sensible

    • Riesgo: Sin Referrer-Policy, los datos sensibles en las URLs pueden ser expuestos a sitios de terceros a través de la información de referencia.

  6. Inyecciones y Explotación de Vulnerabilidades

    • Riesgo: Sin X-XSS-Protection, los navegadores pueden no bloquear ataques XSS conocidos, exponiendo a los usuarios a riesgos adicionales.

Ejemplo de Configuración de Cabeceras de Seguridad en Nginx

Para configurar cabeceras de seguridad en un servidor web Nginx, puedes añadir las siguientes directivas al archivo de configuración del servidor:

server {
    listen 80;
    server_name ejemplo.com;

    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted.cdn.com";
    add_header X-Content-Type-Options "nosniff";
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    add_header X-Frame-Options "DENY";
    add_header X-XSS-Protection "1; mode=block";
    add_header Referrer-Policy "no-referrer";
    add_header Permissions-Policy "geolocation=(), microphone=(), camera=()";

    # Configuración adicional del servidor...
}

Ejemplo de Escaneo de Nmap para Verificar Cabeceras de Seguridad

Nmap, con la ayuda de scripts NSE, puede ser utilizado para verificar las cabeceras de seguridad configuradas en un servidor web.

Comando Nmap

nmap -p 80 --script http-security-headers target-ip

Explicación del Comando

  • nmap: Ejecuta el comando Nmap.

  • -p 80: Especifica que Nmap debe escanear el puerto 80.

  • --script http-security-headers: Utiliza el script NSE http-security-headers para verificar las cabeceras de seguridad.

Ejemplo de Salida de Nmap

Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-18 18:30 UTC
Nmap scan report for 192.168.1.60
Host is up (0.0012s latency).

PORT   STATE SERVICE
80/tcp open  http
| http-security-headers:
|   Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https://trusted.cdn.com
|   X-Content-Type-Options: nosniff
|   Strict-Transport-Security: max-age=31536000; includeSubDomains
|   X-Frame-Options: DENY
|   X-XSS-Protection: 1; mode=block
|   Referrer-Policy: no-referrer
|_  Permissions-Policy: geolocation=(), microphone=(), camera=()

Nmap done: 1 IP address (1 host up) scanned in 3.75 seconds

Última actualización