Corregir resultados de Web Security Scanner

En esta página se explica cómo interpretar, reproducir y corregir los resultados de Web Security Scanner.

Los roles de gestión de identidades y accesos de Security Command Center se pueden conceder a nivel de organización, carpeta o proyecto. La posibilidad de ver, editar, crear o actualizar hallazgos, recursos y fuentes de seguridad depende del nivel de acceso que se te haya concedido. Para obtener más información sobre los roles de Security Command Center, consulta Control de acceso.

Clases de vulnerabilidades

Web Security Scanner detecta las siguientes clases de vulnerabilidades:

  • Cross‑site scripting (XSS)
  • Falsificación de solicitud del lado del servidor
  • Inyección de Flash
  • Contenido mixto
  • Bibliotecas obsoletas o vulnerables
  • Contraseñas sin cifrar
  • Validación de origen no seguro
  • Encabezados no válidos
  • Encabezados mal escritos
  • Repositorios accesibles
  • inyección de SQL
  • Inyección de XML
  • Contaminación de prototipos

Clases de configuraciones erróneas

Web Security Scanner detecta las siguientes clases de configuraciones erróneas:

  • Encabezado de seguridad de transporte estricta mediante HTTP mal configurado
  • Falta el encabezado de política de seguridad de contenido
  • Encabezado de política de seguridad de contenido mal configurado
  • Falta el encabezado Cross-Origin-Opener-Policy
  • Falta la protección contra clickjacking

Si se detecta alguna de estas vulnerabilidades o errores de configuración, el resultado se resaltará para que lo examines detenidamente.

Impacto en los registros

Las trazas de los análisis de Web Security Scanner aparecen en tus archivos de registro. Por ejemplo, Web Security Scanner genera solicitudes de cadenas inusuales, como ~sfi9876 y /sfi9876. Este proceso permite que el análisis examine las páginas de error de tu aplicación. Estas solicitudes de páginas no válidas intencionadamente aparecen en tus registros.

Desactivación de resultados después de la corrección

Después de corregir una vulnerabilidad o un error de configuración, Web Security Scanner no cambia automáticamente el estado del hallazgo correspondiente de Security Command Center a INACTIVE. Si no cambias el estado manualmente, el estado de los resultados que genera Web Security Scanner en Security Command Center seguirá siendo ACTIVE.

Si usas la versión independiente de Web Security Scanner, después de corregir una vulnerabilidad o un error de configuración y Web Security Scanner ya no puede detectarlo, los informes posteriores no incluirán la vulnerabilidad ni el error de configuración. El registro del hallazgo permanece en los informes de hallazgos anteriores.

Web Security Scanner realiza análisis gestionados semanalmente.

Para obtener más información sobre los análisis de Web Security Scanner, consulta Tipos de análisis.

Corregir resultados de Web Security Scanner

En esta sección se explica cómo corregir los distintos tipos de resultados de Web Security Scanner. Para consultar estrategias de defensa frente a ataques habituales a nivel de aplicación que se describen en los 10 riesgos principales según el proyecto OWASP, consulta las opciones de mitigación de los 10 riesgos principales según el proyecto OWASP enGoogle Cloud.

XSS

Nombre de la categoría en la API: XSS

Las pruebas de inyección de XSS que realiza Web Security Scanner simulan ataques de inyección. Para ello, se inserta una cadena de prueba benigna en campos que el usuario puede editar y, a continuación, se llevan a cabo diversas acciones. Los detectores personalizados observan el navegador y el Modelo en Objetos para la Representación de Documentos (DOM) durante la prueba para determinar si se ha realizado alguna operación de inyección y para evaluar las posibilidades de ser utilizada con un uso malintencionado.

Si el código de JavaScript que contiene la cadena de prueba se ejecuta sin impedimentos, se iniciará el depurador de Chrome. Si una cadena de prueba se puede ejecutar, es posible inyectar y ejecutar código de JavaScript en la página. Si un atacante detectara este problema, podría ejecutar el JavaScript que quisiera como usuario (víctima) que haga clic en un enlace malicioso.

En algunas circunstancias, la aplicación que se está probando puede modificar la cadena de prueba antes de que el navegador la analice. Por ejemplo, la aplicación puede validar la entrada o limitar el tamaño de un campo. Cuando el navegador intenta ejecutar esta cadena de prueba modificada, es probable que se produzca un error y se genere un error de ejecución de JavaScript. El error indica un problema de inyección, pero es posible que no se pueda aprovechar.

Para solucionar este problema, debe confirmar si se trata de una vulnerabilidad de XSS verificando manualmente si se pueden eludir las modificaciones de la cadena de prueba. Para obtener información detallada sobre cómo verificar esta vulnerabilidad, consulta Secuencias de comandos entre sitios.

Hay varias formas de solucionar este problema. La solución recomendada es escapar todos los parámetros recibidos y utilizar un sistema de plantillas que admita el escape automático contextual.

XSS angular callback

Nombre de la categoría en la API: XSS_ANGULAR_CALLBACK

Si Angular interpola las cadenas que facilitan los usuarios, podrían producirse vulnerabilidades de XSS en los módulos de AngularJS. Inyectar valores de los usuarios en interpolaciones de AngularJS puede permitir que ocurra lo siguiente:

  • Un atacante puede inyectar código arbitrario en la página que renderizan los navegadores.
  • Un atacante puede llevar a cabo acciones haciéndose pasar por los navegadores afectados en los orígenes de las páginas.

Para reproducir esta posible vulnerabilidad, haz clic en el enlace de la URL de reproducción que puedes encontrar en la consola de Google Cloud después de hacer el análisis correspondiente. Este enlace abre directamente un cuadro de diálogo de alerta o inyecta la cadena XSSDETECTED para demostrar que el ataque puede ejecutar código. Si se inyecta la cadena, puedes abrir las herramientas de desarrollo de tu navegador y buscar XSSDETECTED para encontrar la posición exacta de la inyección.

XSS error

Nombre de la categoría en la API: XSS_ERROR

Un resultado de XSS_ERROR es un posible error de XSS debido a un fallo de JavaScript. En algunas circunstancias, la aplicación que se está probando puede modificar la cadena de prueba antes de que el navegador la analice. Cuando el navegador intenta ejecutar esta cadena de prueba modificada, es probable que falle y genere un error de ejecución de JavaScript. Este error indica un problema de inyección, pero es posible que no se pueda aprovechar.

Para corregir este problema, debes confirmar si hay una vulnerabilidad de XSS verificando manualmente si se pueden eludir las modificaciones de la cadena de prueba. Para obtener información detallada sobre cómo verificar esta vulnerabilidad, consulta Secuencias de comandos entre sitios.

Server side request forgery

Nombre de la categoría en la API: SERVER_SIDE_REQUEST_FORGERY

Una vulnerabilidad de SERVER_SIDE_REQUEST_FORGERY permite a un usuario de una aplicación web acceder a datos internos obligando a un servidor a enviar una solicitud (como una solicitud HTTP) a un endpoint de servicio restringido. Por ejemplo, un atacante puede aprovechar esta vulnerabilidad para obtener datos del servicio de Google Cloud metadatos.

Para solucionar este problema, usa una lista de permitidos para limitar los dominios y las direcciones IP a los que puede enviar solicitudes la aplicación web.

Rosetta flash

Nombre de la categoría en la API: ROSETTA_FLASH

Web Security Scanner puede detectar que el valor de un parámetro de solicitud se refleja al principio de una respuesta, por ejemplo, en solicitudes que usan JSONP. Esta vulnerabilidad también se conoce como inyección de Flash. En determinadas circunstancias, un atacante puede provocar que el navegador ejecute la respuesta como si fuera un archivo Flash proporcionado por la aplicación web vulnerable.

Para solucionar este problema, no incluyas datos que el usuario pueda controlar al inicio de una respuesta HTTP.

Mixed content

Nombre de la categoría en la API: MIXED_CONTENT

Web Security Scanner observa de forma pasiva el tráfico HTTP y detecta cuándo se realiza una solicitud de un archivo JavaScript o CSS a través de HTTP en el contexto de una página HTTPS. En este caso, un atacante intermediario podría manipular el recurso HTTP y obtener acceso completo al sitio web que carga el recurso o monitorizar las acciones que realizan los usuarios.

Para solucionar este problema, utiliza enlaces HTTP relativos. Por ejemplo, sustituye http:// por //.

Outdated library

Nombre de la categoría en la API: OUTDATED_LIBRARY

Web Security Scanner puede detectar si la versión de una biblioteca que se ha incluido tiene algún problema de seguridad. Web Security Scanner es un analizador basado en firmas que intenta identificar la versión de la biblioteca que se está utilizando y la contrasta con una lista de bibliotecas vulnerables conocidas. Puede haber falsos positivos si no es posible detectar la versión o si se ha aplicado manualmente un parche a la biblioteca.

Para solucionar este problema, actualiza la biblioteca a una versión que se sepa que es segura.

Struts insecure deserialization

Nombre de la categoría en la API: STRUTS_INSECURE_DESERIALIZATION

Web Security Scanner puede detectar que tu aplicación web usa una versión de Apache Struts que es vulnerable a ataques de inyección de comandos remotos. Las versiones afectadas de Struts pueden analizar incorrectamente el encabezado HTTP Content-Type no válido de un atacante. Esta vulnerabilidad permite que los comandos maliciosos se ejecuten con los privilegios del servidor web.

Estas son las versiones vulnerables de Apache Struts:

  • Versiones 2.3.x anteriores a la 2.3.32
  • Versiones 2.5.x anteriores a la 2.5.10.1

Para solucionar este problema, actualiza Apache Struts a la versión más reciente.

Para obtener más información sobre la vulnerabilidad de Apache Struts, consulta CVE-2017-5638.

Cacheable password input

Nombre de la categoría en la API: CACHEABLE_PASSWORD_INPUT

Web Security Scanner puede detectar que, en el caso de una entrada de contraseña, la aplicación web usa un elemento <input> que no tiene el atributo type definido como password. Esto puede provocar que los navegadores almacenen en caché la contraseña introducida por el usuario en la caché normal del navegador en lugar de en un almacenamiento de contraseñas seguro.

Para solucionar este problema, añada el atributo type al elemento <input> y asígnale el valor password. Por ejemplo, &lt;input&nbsp;type="password"&gt;. Este atributo oculta los caracteres que el usuario introduce en el campo de contraseña.

Clear text password

Nombre de la categoría en la API: CLEAR_TEXT_PASSWORD

Web Security Scanner puede detectar si la aplicación transmite campos de contraseña sin cifrar. Un atacante puede espiar el tráfico de red y rastrear el campo de contraseña.

Para proteger la información sensible que se transfiere entre el cliente y el servidor, adopta siempre las siguientes precauciones:

  • Utiliza certificados TLS/SSL.
  • Usa siempre el protocolo HTTPS en las páginas que incluyan campos de contraseña.
  • Comprueba que los atributos de acción de formulario se dirijan siempre a URLs del tipo HTTPS.

Insecure allow origin ends with validation

Nombre de la categoría en la API: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

Web Security Scanner puede detectar que un endpoint HTTP o HTTPS entre sitios solo valida un sufijo del encabezado de solicitud Origin antes de reflejarlo en el encabezado de respuesta Access-Control-Allow-Origin. Si la validación está mal configurada, el endpoint podría conceder acceso a un dominio malicioso que tenga el mismo sufijo que un dominio de la lista de permitidos. Por ejemplo, si el validador del endpoint coincide con dominios como *google.com, podría conceder acceso por error a maliciousdomaingoogle.com.

Para solucionar este problema, compruebe que el dominio raíz esperado forma parte del valor del encabezado Origin antes de reflejarlo en el encabezado de respuesta Access-Control-Allow-Origin. En el caso de los comodines de subdominio, añade un punto antes del dominio raíz (por ejemplo, .endsWith(".google.com")).

Insecure allow origin starts with validation

Nombre de la categoría en la API: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

Web Security Scanner puede detectar que un endpoint HTTP o HTTPS entre sitios solo valida un prefijo del encabezado de solicitud Origin antes de reflejarlo en el encabezado de respuesta Access-Control-Allow-Origin. Si la validación está mal configurada, el endpoint podría conceder acceso a un dominio malicioso que tenga el mismo prefijo que un dominio incluido en la lista de permitidos. Por ejemplo, si el validador del endpoint solo comprueba si el dominio solicitante contiene google.com, podría conceder acceso erróneamente a google.com.maliciousdomain.com.

Para solucionar este problema, valide que el dominio esperado coincida completamente con el valor del encabezado Origin antes de reflejarlo en el encabezado de respuesta Access-Control-Allow-Origin; por ejemplo, .equals(".google.com").

Session ID leak

Nombre de la categoría en la API: SESSION_ID_LEAK

Web Security Scanner puede encontrar un identificador de sesión en el encabezado de solicitud Referer de las solicitudes entre dominios de tu aplicación web. Los dominios que reciben el Referer pueden usar el identificador de sesión para suplantar la identidad de un usuario (mediante su token) o identificarlo de forma única.

Para solucionar este problema, almacena los identificadores de sesión en cookies en lugar de en la URL. Además, proteja sus cookies con los siguientes atributos:

  • HTTPOnly un atributo que hace que las cookies sean inaccesibles para las secuencias de comandos del lado del cliente.
  • Secure: atributo que hace que las cookies solo se puedan transmitir a través de HTTPS.

Invalid content type

Nombre de la categoría en la API: INVALID_CONTENT_TYPE

Web Security Scanner puede detectar si se ha cargado un recurso que no coincide con el encabezado HTTP content-type de la respuesta. En este caso, la aplicación devuelve contenido sensible con un tipo de contenido no válido o sin un encabezado X-Content-Type-Options: nosniff.

Para solucionar este problema, comprueba lo siguiente:

  • Las respuestas JSON se envían con el encabezado Content-Type application/json.
  • El resto de respuestas sensibles se envían con los tipos MIME apropiados.
  • El contenido se envía con el encabezado HTTP X-Content-Type-Options: nosniff.

Invalid header

Nombre de la categoría en la API: INVALID_HEADER

Web Security Scanner puede detectar si un encabezado de seguridad contiene errores sintácticos, lo que provoca que el encabezado tenga un formato incorrecto o no sea válido. Por lo tanto, el navegador ignora estos encabezados.

Los encabezados válidos se describen en las siguientes secciones.

Encabezado Referrer-Policy

Los encabezados Referrer-Policy válidos contienen uno de los siguientes valores:

  • Una cadena vacía
  • no-referrer
  • no-referrer-when-downgrade
  • same-origin
  • origin
  • strict-origin
  • origin-when-cross-origin
  • strict-origin-when-cross-origin
  • unsafe-url

Encabezado X-Frame-Options

Los encabezados X-Frame-Options válidos solo pueden tener los siguientes valores:

  • DENY: no permitir ningún marco
  • SAMEORIGIN: permite el uso de marcos si la URL de nivel superior es del mismo origen.
  • ALLOW-FROM URL

Chrome no admite ALLOW-FROM URL. No se permite el uso de varios encabezados X-Frame-Options.

Encabezado X-Content-Type-Options

Los encabezados X-Content-Type-Options válidos solo pueden tener el valor nosniff.

Encabezado X-XSS-Protection

Los encabezados X-XSS-Protection válidos deben empezar por 0 ("inhabilitado") o 1 ("habilitado"). Después, solo si habilitas la protección, podrás añadir hasta dos opciones:

  • mode=block muestra una página en blanco en lugar de filtrar el XSS
  • report=URL envía informes a URL

Separa las opciones con puntos y comas, por ejemplo, 1; mode=block; report=URI. Asegúrate de que no haya un punto y coma al final.

Misspelled security header name

Nombre de la categoría en la API: MISSPELLED_SECURITY_HEADER_NAME

Web Security Scanner puede detectar si el nombre de un encabezado de seguridad está mal escrito. Si hay errores de este tipo, los encabezados no resultan efectivos y deben corregirse.

Para reproducir esta vulnerabilidad, consulta cuál es el error en la pestaña de red de las herramientas de desarrollador de tu navegador.

Mismatching security header values

Nombre de la categoría en la API: MISMATCHING_SECURITY_HEADER_VALUES

Web Security Scanner puede detectar si una respuesta contiene encabezados de seguridad duplicados con valores en conflicto. Algunos encabezados HTTP relacionados con la seguridad presentan un comportamiento impredecible si se declaran dos veces en la respuesta con valores diferentes.

Para corregir este problema, conserve solo uno de los dos encabezados.

Repositorio accesible

Web Security Scanner puede detectar repositorios de GIT o SVN accesibles en la aplicación. Esta condición puede conducir a brechas en la configuración y en el código fuente.

Para reproducir esta vulnerabilidad, haz clic en la URL de reproducción del informe de resultados.

XXE reflected file leakage

Nombre de la categoría en la API: XXE_REFLECTED_FILE_LEAKAGE

Web Security Scanner puede encontrar una vulnerabilidad de entidad externa XML (XXE) en una aplicación web que analice XML a partir de las entradas de los usuarios. Un atacante puede proporcionar un XML que contenga una entidad externa. Esta entidad externa puede hacer referencia a contenido al que tenga acceso la aplicación, como archivos del host de la aplicación. Cuando el analizador XML de la aplicación procesa el XML malicioso, puede filtrar el contenido de los archivos de su host.

Para solucionar este problema, configure sus analizadores XML para que no permitan entidades externas.

Para obtener más información sobre esta vulnerabilidad, consulta Procesamiento de entidades externas XML (XXE).

SQL injection

Nombre de la categoría en la API: SQL_INJECTION

Web Security Scanner puede detectar una vulnerabilidad de inyección de SQL. Los atacantes pueden crear entradas que manipulen la estructura de consulta de la consulta SQL subyacente que se ejecuta en el servidor. Estas entradas les permiten extraer datos de la base de datos y, en algunos casos, modificar datos. Para solucionar este problema, usa consultas parametrizadas para evitar que la entrada del usuario influya en la estructura de la consulta de SQL.

Para obtener más información sobre esta vulnerabilidad, consulta Inyección de SQL.

Prototype pollution

Nombre de la categoría en la API: PROTOTYPE_POLLUTION

Web Security Scanner puede detectar una vulnerabilidad de contaminación de prototipos en una aplicación web cuyas propiedades de objeto tienen asignados valores controlables por el atacante. Los atacantes pueden crear entradas que hagan que la aplicación sea vulnerable a ataques de secuencias de comandos entre sitios u otras vulnerabilidades del lado del cliente.

Para solucionar este problema, elimine la propiedad proto obsoleta y haga que el objeto Object.prototype sea inmutable. Si esta mitigación no es compatible con tu código, cambia la parte del código vulnerable para que solo copie los valores esperados de las entradas controladas por el atacante.

Corregir resultados de configuraciones erróneas de Web Security Scanner

En esta sección se explica cómo corregir diferentes tipos de resultados de configuración incorrecta de Web Security Scanner.

Configuración incorrecta de la seguridad de transporte estricta mediante HTTP

Nombre de la categoría en la API: HSTS_MISCONFIGURATION

Web Security Scanner se asegura de que el encabezado HTTP Strict Transport Security se envíe con cada respuesta HTTP y de que esté configurado correctamente. Para limitar el impacto en la estabilidad de su sitio web, haga lo siguiente:

  1. Empieza con un max-age pequeño y solo incluye includeSubDomains (sin preload). Ejemplo: max-age=3600; includeSubDomains.
  2. Después de un breve periodo de bloqueo de aproximadamente una semana sin que se hayan notificado problemas, aumenta el valor de max-age. Ejemplo: max-age=604800; includeSubDomains o max-age=2592000; includeSubDomains.
  3. Después de unos tres meses sin que se hayan detectado problemas, añade tu sitio web y sus subdominios a hstspreload.org y especifica la directiva de precarga. Si especificas la directiva de precarga, el requisito de HSTS se incorpora al navegador y los agentes malintencionados no pueden cambiar la conexión a una versión anterior. Directiva de precarga: max-age=63072000; includeSubDomains; preload.

Falta el encabezado Content-Security-Policy

Nombre de la categoría en la API: CSP_MISSING

Web Security Scanner se asegura de que se envíe un encabezado Content-Security-Policy estricto y que solo incluya nonce con cada respuesta HTTP.

  Content-Security-Policy:
    script-src 'nonce-{random}' 'report-sample';
    object-src 'none';
    base-uri 'none';
    report-uri https://link-to-report-endpoint

Encabezado Content-Security-Policy mal configurado

Nombre de la categoría en la API: CSP_MISCONFIGURATION

Web Security Scanner se asegura de que se envíe un encabezado Content-Security-Policy estricto y que solo incluya nonce con cada respuesta HTTP.

  Content-Security-Policy:
    script-src 'nonce-{random}' 'report-sample';
    object-src 'none';
    base-uri 'none';
    report-uri https://link-to-report-endpoint

Falta el encabezado Cross-Origin-Opener-Policy

Nombre de la categoría en la API: COOP_MISSING

Web Security Scanner se asegura de que el encabezado Cross-Origin-Opener-Policy se envíe con cada respuesta HTTP, incluida una de las directivas válidas:

  • unsafe-none
  • same-origin-allow-popups
  • same-origin

Falta la protección contra clickjacking

Nombre de la categoría en la API: CLICKJACKING_PROTECTION_MISSING

Web Security Scanner comprueba que se envíe un encabezado X-Frame-Options o Content-Security-Policy con cada respuesta HTTP para evitar el clickjacking:

  • Si utiliza un encabezado X-Frame-Options, use la directiva DENY o SAMEORIGIN.
  • Si utiliza un encabezado Content-Security-Policy, configure la directiva frame-ancestors.

Verificar el problema

Cuando Web Security Scanner informe de un problema, deberás verificar la ubicación en la que se ha producido. En esta sección se explica cómo usar los informes de resultados para reproducir y verificar vulnerabilidades.

  1. Ve a la página Web Security Scanner en la Google Cloud consola.

    Ir a Web Security Scanner

  2. Selecciona un proyecto. Aparecerá una página con una lista de tus análisis gestionados y personalizados.

  3. En Configuraciones de análisis, selecciona el análisis que contenga el resultado que quieras verificar. Se abrirá una página con los detalles del análisis.

  4. Ve a la pestaña Resultados, despliega una categoría y selecciona un resultado para ver sus detalles.

  5. El método de verificación varía en función de la categoría del hallazgo. Usa un navegador de prueba y sigue las instrucciones que se indican a continuación.

    • Secuencias de comandos entre sitios: al seguir la URL de reproducción, se genera una ventana emergente vacía en el navegador, lo que indica que la exploración ha insertado correctamente código benigno en una secuencia de comandos.
    • Biblioteca obsoleta: si sigues la URL vulnerable, se devuelve una página con el texto "Exploited", lo que indica que la exploración ha inyectado correctamente código benigno en una secuencia de comandos.
    • Contenido mixto: al seguir la URL de la página HTTPS, se devuelve una advertencia sobre una vulnerabilidad de contenido mixto. El informe de la detección identifica el recurso vulnerable en URL del recurso servido a través de HTTP.
    • Inyección de Flash: Web Security Scanner puede devolver resultados en esta categoría, pero la mayoría de los navegadores modernos están protegidos contra la inyección de Flash. Es poco probable que se puedan aprovechar estas vulnerabilidades.
    • Contaminación de prototipos: sigue la URL del campo URL de reproducción y busca los cambios en el objeto Object.prototype introducidos por la carga útil con los siguientes fragmentos de JavaScript.
      • ({}).__secret_injected_property
      • ({}).__defineGetter__.__secret_injected_property
      • ({}).hasOwnProperty.__secret_injected_property

La aplicación de la política de seguridad del contenido (CSP) puede evitar que el código de JavaScript se ejecute, Esta condición puede dificultar la reproducción del XSS. Si tienes este problema, consulta la consola de registros del navegador para obtener información sobre la infracción de la CSP en cuestión.