Solución de los resultados de Web Security Scanner

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

Los roles de IAM de Security Command Center se pueden otorgar a nivel de organización, carpeta o proyecto. Tu capacidad para ver, editar, crear o actualizar resultados, recursos y fuentes de seguridad depende del nivel al que se te otorga acceso. Para obtener más información sobre los roles de Security Command Center, consulta Control de acceso.

Clases de vulnerabilidad

Web Security Scanner detecta las siguientes clases de vulnerabilidades:

  • Secuencia de comandos entre sitios (XSS)
  • Falsificación de solicitudes del servidor
  • Inyección Flash
  • Contenido mixto
  • Bibliotecas desactualizadas o vulnerables
  • Contraseñas en texto claro
  • 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 prototipo

Si se detecta alguna de estas vulnerabilidades, el resultado se resaltará para que los explores en detalle.

Impacto en los registros

Los seguimientos de los análisis de Web Security Scanner aparecen en tus archivos de registro. Por ejemplo, Web Security Scanner genera solicitudes para strings inusuales como ~sfi9876 y /sfi9876. Este proceso permite que el análisis examine las páginas de error de la aplicación. Estas solicitudes de página intencionalmente no válidas aparecerán en tus registros.

Desactivación de los resultados después de la solución

Después de corregir una vulnerabilidad, Web Security Scanner no establece automáticamente el estado de la el resultado correspondiente de Security Command Center a INACTIVE. A menos que cambies el estado de forma manual, 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 y que Web Security Scanner ya no pueda detectarla, los informes de vulnerabilidades posteriores no la incluirán. Queda un registro de la vulnerabilidad en los informes de vulnerabilidad anteriores.

Web Security Scanner ejecuta análisis administrados semanalmente.

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

Solución de los resultados de Web Security Scanner

En esta sección, se explica cómo solucionar diferentes tipos de resultados de Web Security Scanner. Para ver las estrategias de defensa contra ataques comunes a nivel de la aplicación que se describen en las 10 amenazas principales de OWASP, consulta las 10 opciones principales de mitigación de OWASP en Google Cloud.

XSS

Nombre de categoría en la API: XSS

Las pruebas de inyección de la secuencia de comandos entre sitios (XSS) de Web Security Scanner simulan un ataque de inyección mediante la inserción de una string de prueba benigna en campos que el usuario puede editar y, luego, realizan varias acciones del usuario. Los detectores personalizados observan el navegador y el DOM durante esta prueba para determinar si una inyección fue exitosa y evaluar su potencial de vulnerabilidad.

Si el JavaScript de la string de prueba se ejecuta correctamente, inicia el depurador de Chrome. Cuando una string de prueba puede ejecutarse, es posible inyectar y ejecutar JavaScript en la página. Si un atacante encontró este problema, podría ejecutar JavaScript de su elección como usuario (víctima) que hace clic en un vínculo malicioso.

En algunas circunstancias, la aplicación sometida a prueba podría modificar la string de prueba antes de que el navegador la analice. Por ejemplo, la aplicación podría validar la entrada o limitar el tamaño de un campo. Cuando el navegador intenta ejecutar esta string de prueba modificada, es probable que falle y genere un error de ejecución de JavaScript. El error indica un problema de inyección, pero tal vez no sea posible exponerlo.

Para abordar este problema, debes confirmar si el problema es una vulnerabilidad XSS mediante la verificación manual si las modificaciones de la string de prueba se pueden derivar. Para obtener información detallada sobre cómo verificar esta vulnerabilidad, consulta Secuencia de comandos entre sitios.

Hay varias formas de solucionar este problema. La corrección recomendada es evitar todos los resultados y usar un sistema de plantillas que admita la evasión automática contextual.

XSS angular callback

Nombre de categoría en la API: XSS_ANGULAR_CALLBACK

Puede ocurrir una vulnerabilidad de secuencia de comandos entre sitios (XSS) en los módulos AngularJS cuando Angular interpola una string que proporciona el usuario. Inyectar valores proporcionados por el usuario en una interpolación AngularJS puede permitir los siguientes ataques:

  • Un atacante puede inyectar un código arbitrario en la página que procesan los navegadores.
  • Un atacante puede realizar acciones en nombre del navegador de la víctima en el origen de la página.

Para reproducir esta posible vulnerabilidad, sigue el vínculo de la URL de reproducción en en la consola de Google Cloud después de ejecutar el análisis. Este vínculo abrirá directamente un diálogo de alerta o inyectará la string XSSDETECTED para demostrar que el ataque puede ejecutar el código. Si se inyectó la string, puedes abrir las herramientas para desarrolladores de tu navegador y buscar XSSDETECTED a fin de encontrar la posición exacta de la inyección.

XSS error

Nombre de categoría en la API: XSS_ERROR

Un resultado de XSS_ERROR es un posible error XSS debido a una falla de JavaScript. En algunas circunstancias, la aplicación sometida a prueba puede modificar la string de prueba antes de que el navegador la analice. Cuando el navegador intenta ejecutar esta string 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 tal vez no sea posible exponerlo.

Para abordar este problema, debes confirmar si el problema es una vulnerabilidad XSS mediante la verificación manual si las modificaciones de la string de prueba se pueden derivar. Para obtener información detallada sobre cómo verificar esta vulnerabilidad, consulta Secuencia de comandos entre sitios.

Server side request forgery

Nombre de categoría en la API: SERVER_SIDE_REQUEST_FORGERY

Una vulnerabilidad SERVER_SIDE_REQUEST_FORGERY permite que un usuario de la aplicación web obtenga acceso a los datos internos cuando obliga a un servidor a realizar una solicitud (como una solicitud HTTP) a un extremo de servicio restringido. Por ejemplo, un atacante puede aprovechar esta vulnerabilidad para recuperar datos del servicio de metadatos de Google Cloud.

Para corregir este problema, usa una lista de entidades permitidas a fin de limitar los dominios y las direcciones IP a las que la aplicación web puede realizar solicitudes.

Rosetta flash

Nombre de categoría en la API: ROSETTA_FLASH

Web Security Scanner puede detectar que el valor de un parámetro de solicitud se refleja al inicio de una respuesta, por ejemplo, en solicitudes con JSONP. Esta vulnerabilidad también se conoce como inyección Flash. En ciertas circunstancias, un atacante puede hacer que el navegador ejecute la respuesta como si fuese 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 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 mientras se encuentra en el contexto de una página HTTPS. En esta situación, un atacante ide ntermediario podría alterar el recurso HTTP y obtener acceso completo al sitio web que carga el recurso o supervisar las acciones de los usuarios.

Para solucionar este problema, usa vínculos HTTP relativos; por ejemplo, reemplaza http:// por //.

Outdated library

Nombre de categoría en la API: OUTDATED_LIBRARY

Web Security Scanner puede detectar que la versión de una biblioteca incluida contiene un problema de seguridad. Web Security Scanner es un análisis basado en firmas que intenta identificar la versión de la biblioteca en uso y la compara con una lista conocida de bibliotecas vulnerables. Los falsos positivos son posibles si falla la detección de la versión o si la biblioteca se parcheó manualmente.

Para solucionar este problema, actualiza a una versión segura y conocida de la biblioteca incluida.

Struts insecure deserialization

Nombre de categoría en la API: STRUTS_INSECURE_DESERIALIZATION

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

Las siguientes son las versiones vulnerables de Apache Struts:

  • Versiones 2.3.x anteriores a 2.3.32
  • Versiones 2.5.x anteriores a 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 categoría en la API: CACHEABLE_PASSWORD_INPUT

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

Para solucionar este problema, en el elemento <input>, agrega el atributo type y configúralo como password, por ejemplo, <input type="password">. Este atributo oculta los caracteres que el usuario ingresa en el campo de contraseña.

Clear text password

Nombre de categoría en la API: CLEAR_TEXT_PASSWORD

Web Security Scanner puede detectar que la aplicación podría estar transmitiendo un campo de contraseña en texto no encriptado. Un atacante puede escuchar el tráfico de red y detectar el campo de contraseña.

Para proteger la información sensible que pasa entre el cliente y el servidor, toma siempre las siguientes precauciones:

  • Usa certificados TLS/SSL.
  • Siempre usa HTTPS en páginas que incluyan campos de contraseña.
  • Asegúrate de que los atributos de acción de formulario siempre apunten a una URL HTTPS.

Insecure allow origin ends with validation

Nombre de categoría en la API: INSECURE_ALLOW_ORIGIN_ENDS_WITH_VALIDATION

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

Para solucionar este problema, valida que el dominio raíz esperado sea parte del valor del encabezado Origin antes de reflejarlo en el encabezado de respuesta de Access-Control-Allow-Origin. Para los comodines de subdominio, antepón el punto al dominio raíz, por ejemplo, .endsWith(".google.com").

Insecure allow origin starts with validation

Nombre de categoría en la API: INSECURE_ALLOW_ORIGIN_STARTS_WITH_VALIDATION

Web Security Scanner podría detectar que un extremo HTTP o HTTPS de un sitio solo valida un prefijo del encabezado de solicitud Origin antes de reflejarlo dentro del encabezado de respuesta Access-Control-Allow-Origin. Si la validación está mal configurada, el extremo podría otorgar acceso a un dominio malicioso que tenga el mismo prefijo que un dominio dentro de una lista de entidades permitidas. Por ejemplo, si el validador del extremo solo verifica si el dominio solicitante contiene google.com, es posible que otorgues acceso a google.com.maliciousdomain.com por error.

Para corregir este resultado, verifica que el dominio esperado coincida por completo con el valor del encabezado Origin antes de reflejarlo en el encabezado de respuesta de Access-Control-Allow-Origin, por ejemplo, .equals(".google.com").

Session ID leak

Nombre de categoría en la API: SESSION_ID_LEAK

Web Security Scanner podría encontrar un identificador de sesión en el encabezado de la solicitud Referer de las solicitudes entre dominios de la aplicación web. Los dominios que reciben el Referer pueden usar el identificador de sesión para actuar en nombre de un usuario (mediante su token) o identificar de forma única al usuario.

Para corregir este resultado, almacena los identificadores de sesión en cookies, en lugar de en la URL. Además, protege tus cookies con los siguientes atributos:

  • HTTPOnly: un atributo que hace que las cookies sean inaccesibles para las secuencias de comandos del cliente.
  • Seguro: Un atributo que hace que las cookies sean transmisibles solo a través de HTTPS

Invalid content type

Nombre de categoría en la API: INVALID_CONTENT_TYPE

Web Security Scanner podría detectar que se cargó un recurso que no coincide con el encabezado HTTP del tipo de contenido de la respuesta. En esta situación, la aplicación muestra contenido sensible con un tipo de contenido no válido o sin un encabezado X-Content-Type-Options: nosniff.

Para solucionar este problema, asegúrate de hacer lo siguiente:

  • Las respuestas JSON se entregan con el encabezado Content-Type application/json
  • Otras respuestas sensibles se envían con los tipos MIME adecuados
  • Entrega contenido con el encabezado HTTP X-Content-Type-Options: nosniff

Invalid header

Nombre de categoría en la API: INVALID_HEADER

Web Security Scanner podría detectar que un encabezado de seguridad tiene un error de sintaxis, lo que da como resultado un encabezado con valor incorrecto o no válido. Como resultado, el navegador ignora estos encabezados.

Se describen los encabezados válidos en las siguientes secciones.

Encabezado Referrer-Policy

Una política de referencia válida contiene uno de los siguientes valores:

  • Una string 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

Un encabezado X-Frame-Options válido solo puede tener los siguientes valores:

  • DENY: inhabilita todos los marcos
  • SAMEORIGIN: permite enmarcar si la URL de nivel superior es del mismo origen.
  • ALLOW-FROM URL

Chrome no es compatible con ALLOW-FROM URL. No se permiten varias X-Frame-Options.

Encabezado X-Content-Type-Options

Un encabezado X-Content-Type-Options válido solo puede tener un valor: nosniff.

Encabezado X-XSS-Protection

Un encabezado X-XSS-Protection válido debe comenzar con 0 (“inhabilitar”) o 1 (“habilitar”). Luego, solo si habilitas la protección, puedes agregar hasta dos opciones:

  • mode=block mostrará una página en blanco en lugar de filtrar la XSS
  • report=URL enviará informes a URL

Opciones separadas con punto y coma, por ejemplo 1; mode=block; report=URI. Asegúrate de no tener un punto y coma final.

Misspelled security header name

Nombre de categoría en la API: MISSPELLED_SECURITY_HEADER_NAME

Web Security Scanner podría detectar un nombre de encabezado de seguridad mal escrito. En su forma mal escrita, el encabezado de seguridad es ineficaz y debe corregirse.

Para reproducir esta vulnerabilidad, comprueba si hay errores ortográficos en la pestaña de red de las herramientas de desarrollo de tu navegador.

Mismatching security header values

Nombre de categoría en la API: MISMATCHING_SECURITY_HEADER_VALUES

Web Security Scanner podría detectar que la respuesta tiene encabezados de respuesta relacionados con la seguridad duplicados y con valores conflictivos. Algunos encabezados HTTP relacionados con la seguridad tienen una conducta indefinida si se los declara dos veces en la respuesta, con valores que no coinciden.

Para corregir este problema, mantén solo uno de los encabezados que no coinciden.

Repositorio accesible

Web Security Scanner podría encontrar un repositorio de GIT o SVN accesible en la aplicación. Esto puede generar fugas de configuración y de código fuente.

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

XXE reflected file leakage

Nombre de categoría en la API: XXE_REFLECTED_FILE_LEAKAGE

Web Security Scanner podría encontrar una vulnerabilidad de entidad externa XML (XXE) en una aplicación web que analiza el XML a partir de entradas de usuario. Un atacante puede proporcionar un XML que contiene una entidad externa. Esta entidad externa puede hacer referencia al contenido al que la aplicación puede acceder, por ejemplo, archivos en la máquina anfitrión de la aplicación. Cuando el analizador de XML de la aplicación procesa el XML malicioso, puede filtrar el contenido de los archivos en su host.

Para corregir este resultado, configura los analizadores XML a fin de inhabilitar las entidades externas.

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

SQL injection

Nombre de categoría en la API: SQL_INJECTION

Web Security Scanner podría encontrar una vulnerabilidad de inyección de SQL. Los atacantes pueden crear entradas que manipulen la estructura de la consulta de SQL subyacente que se ejecuta en el servidor. Estas entradas les permiten robar datos de la base de datos y, en algunos casos, modificar datos. Para resolver este resultado, usa consultas con parámetros a fin de 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 Inserción de SQL.

Prototype pollution

Nombre de categoría en la API: PROTOTYPE_POLLUTION

Web Security Scanner podría encontrar una vulnerabilidad de contaminación de prototipo en una aplicación web cuyas propiedades de objetos tienen valores que el atacante puede controlar. Los atacantes pueden crear entradas que hagan que la aplicación sea vulnerable a secuencia de comandos entre sitios u otras vulnerabilidades del lado del cliente.

Para corregir este hallazgo, borra la propiedad proto obsoleta y haz que el objeto Object.prototype sea inmutable. Si esta mitigación no es compatible con tu código, cambia la parte vulnerable del código para copiar solo los valores esperados de las entradas que el atacante puede controlar.

Verifica el problema

Cuando Web Security Scanner informa un problema, debes verificar su ubicación. En esta sección, se explica cómo usar los informes de resultados para reproducir y verificar las vulnerabilidades.

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

    Ir a Web Security Scanner

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

  3. En Configuraciones de análisis, selecciona el análisis con el resultado que deseas verificar. Se abrirá una página con detalles para el análisis.

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

  5. El método de verificación difiere según la categoría del resultado. Usa un navegador de prueba y sigue estas instrucciones.

    • Secuencia de comandos entre sitios: después de la URL de reproducción, se genera una ventana emergente vacía en el navegador, que indica que el análisis insertó el código correctamente a una secuencia de comandos.
    • Biblioteca desactualizada: después de la URL vulnerable, se muestra una página con el texto “Exploited”, que indica que el análisis se incorporó correctamente a una secuencia de comandos.
    • Contenido mixto: después de la URL de la página HTTPS, se muestra una advertencia sobre una vulnerabilidad de contenido mixto. El informe de resultados identifica el recurso vulnerable en la URL del recurso entregado a través de HTTP.
    • Inserción de Flash: Es posible que Web Security Scanner muestre los resultados en esta categoría; sin embargo, la mayoría de los navegadores modernos están protegidos contra la inyección Flash. Es poco probable que se puedan aprovechar estos hallazgos.
    • Contaminación de prototipo: Sigue la URL del campo URL de reproducción. y busca cambios en el objeto Object.prototype introducido 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) podría impedir que se ejecute el código JavaScript. Esto puede dificultar más la reproducción de XSS. Si experimentas este problema, revisa la consola de registros del navegador para obtener detalles sobre el incumplimiento de CSP que se produjo.