Consideraciones de seguridad con metadatos

Cuando se usan las características de metadatos de Windows Communication Foundation (WCF), se deben tener en cuenta las implicaciones de seguridad de la publicación, recuperación y utilización de los metadatos del servicio.

Cuándo publicar metadatos

Los servicios WCF no publican metadatos de manera predeterminada. Para publicar metadatos de un servicio WCF, debe habilitarse explícitamente la publicación de metadatos mediante la adición de los puntos de conexión de metadatos al servicio (consulte Publicación de metadatos). Deshabilitar la publicación de metadatos reduce la superficie de ataque de su servicio y disminuye el riesgo de divulgación involuntaria de información. No todos los servicios deben publicar metadatos. Si no tiene que publicar metadatos, considere el mantener esta opción desactivada. Tenga en cuenta que puede seguir generando metadatos y código de cliente directamente desde los ensamblados del servicio mediante la Herramienta de utilidad de metadatos de ServiceModel Metadata (Svcutil.exe). Para obtener más información sobre el uso de Svcutil.exe para exportar metadatos, consulte Procedimiento para usar Svcutil.exe y así exportar metadatos desde el código del servicio compilado.

Publicar metadatos mediante un enlace seguro

Los enlaces de metadatos predeterminados que proporciona no son seguros y permiten el acceso anónimo a los metadatos. Los metadatos de servicio que un servicio WCF publica contienen una descripción detallada del servicio y pueden incluir, de forma intencionada o involuntaria, información confidencial. Por ejemplo, los metadatos de servicio pueden contener información sobre operaciones de infraestructura que no se tenía intención de divulgar públicamente. Para proteger los metadatos de servicio de los accesos no autorizados, utilice un enlace de seguridad para el punto de conexión de los metadatos. Los puntos de conexión de metadatos responden a las solicitudes HTTP/GET que pueden utilizar la capa de sockets seguros (SSL) para proteger los metadatos. Para obtener más información, consulte Procedimiento para proteger puntos de conexión de metadatos.

La protección de los puntos de conexión de metadatos también proporciona un método para que los solicitantes recuperen metadatos de servicio de manera segura, sin el riesgo de manipulación o suplantación.

Utilización únicamente de metadatos de confianza

Se pueden utilizar metadatos de servicio para construir automáticamente los componentes en tiempo de ejecución necesarios para llamar al servicio. Asimismo, pueden utilizarse metadatos en tiempo de diseño para desarrollar una aplicación cliente o en tiempo de ejecución para actualizar de forma dinámica el enlace que usa un cliente para llamar a un servicio.

Los metadatos de servicio pueden manipularse o suplantarse cuando se recuperan de manera insegura. Los metadatos modificados pueden redirigir el cliente a un servicio malintencionado, incluir parámetros de seguridad comprometedores o contener estructuras XML malintencionadas. Los documentos de metadatos pueden ser grandes y con frecuencia se almacenan en el sistema de archivos. Para protegerse de la manipulación y suplantación, use un enlace seguro para solicitar los metadatos de servicio cuando haya uno disponible.

Utilización de técnicas seguras para procesar metadatos

Con frecuencia, los metadatos de servicio se recuperan desde un servicio, a través de una red, utilizando protocolos normalizados como WS-MetadataExchange (MEX). Muchos formatos de metadatos incluyen mecanismos de referencia que señalan a metadatos adicionales. El tipo MetadataExchangeClient procesa automáticamente las referencias a documentos del lenguaje de descripción de servicios Web (WSDL), el esquema XML y documentos MEX. El tamaño del objeto MetadataSet creado a partir de los metadatos recuperados es directamente proporcional al valor MaximumResolvedReferences para la instancia MetadataExchangeClient que se utiliza, y el valor MaxReceivedMessageSize para el enlace utilizado por esa instancia MetadataExchangeClient. Establezca estas cuotas en los valores adecuados siguiendo el dictado de su escenario.

En WCF, los metadatos de servicio se procesan como XML. Cuando se procesan documentos XML, las aplicaciones deberían protegerse de las estructuras XML malintencionadas. Use XmlDictionaryReader con cuotas adecuadas para procesar XML y establezca también la propiedad DtdProcessing en Prohibit.

El sistema de metadatos WCF es extensible, y las extensiones de metadatos pueden registrarse en el archivo de configuración de la aplicación (consulte Extensión del sistema de metadatos). Las extensiones de metadatos pueden ejecutar código arbitrario, por lo que debería proteger su archivo de configuración de la aplicación con listas de control de acceso (ACL) adecuadas, y registrar sólo implementaciones de extensión de metadatos de confianza.

Validación de los clientes generados

Al generar código de cliente a partir de los metadatos recuperados de un origen que no es de confianza, valide el código de cliente generado para asegurarse de que el cliente generado cumple las directivas de seguridad de las aplicaciones cliente. Puede utilizar un comportamiento de validación para comprobar los valores del enlace del cliente o, inspeccionar visualmente el código generado mediante herramientas. Para obtener un ejemplo sobre cómo implementar un cliente que valide comportamientos, consulte Validación de cliente.

Protección de los archivos de configuración de la aplicación

El archivo de configuración de la aplicación de un servicio puede controlar si se publican metadatos y cómo. Es recomendable proteger el archivo de configuración de la aplicación con listas de control de acceso (ACL) adecuadas, para asegurarse de que un atacante no pueda modificar esos valores.

Consulte también