Conjunto de reglas de análisis de código Reglas de seguridad de Microsoft

Debe incluir el conjunto Reglas de seguridad de Microsoft para maximizar el número de posibles problemas de seguridad que se notifican.

Regla

Descripción

CA2116: Los métodos APTCA deben llamar solo a métodos APTCA

Si está presente el atributo APTCA (AllowPartiallyTrustedCallers) en un ensamblado de plena confianza y el ensamblado ejecuta código de otro ensamblado que no permite llamadores de confianza parcial, se puede producir un ataque en el sistema de seguridad.

CA2117: Los tipos APTCA solo amplían tipos base APTCA

Si está presente el atributo APTCA (AllowPartiallyTrustedCallers) en un ensamblado de plena confianza y un tipo del ensamblado se hereda de otro que no permite llamadores de confianza parcial, se puede producir un ataque de seguridad.

CA2105: Los campos de matrices no deberían ser de solo lectura

Cuando se aplica el modificador de solo lectura (ReadOnly en Visual Basic) a un campo que contiene una matriz, el campo no se puede modificar para hacer referencia a una matriz distinta. Sin embargo, se pueden cambiar los elementos de la matriz almacenados en un campo de sólo lectura.

CA2210: Los ensamblados deben tener nombres seguros válidos

El nombre seguro protege los clientes de cargar inconscientemente un ensamblado con el que se ha alterado. Los ensamblados sin nombres seguros sólo deben implementarse en escenarios muy limitados. Si se comparten o se distribuyen ensamblados que no están correctamente firmados, el ensamblado puede manipularse, el Common Language Runtime podría no cargar el ensamblado o el usuario podría deshabilitar la comprobación del equipo.

CA2115: Llamar a GC.KeepAlive cuando se utilicen recursos nativos

Esta regla detecta errores que pueden haberse producido porque se finaliza un recurso no administrado mientras todavía se utiliza en código no administrado.

CA2102: Detectar las excepciones que no son CLSCompliant en los controladores generales

Un miembro de un ensamblado que no está marcado con el atributo RuntimeCompatibilityAttribute o está marcado con RuntimeCompatibility(WrapNonExceptionThrows = false) contiene un bloque catch que controla el objeto System.Exception y no contiene un bloque catch general inmediatamente después.

CA2104: No declarar tipos de referencias mutables de solo lectura

Un tipo visible externamente contiene un campo de sólo lectura visible externamente que es un tipo de referencia que se puede cambiar. Un tipo que mutable es un tipo cuyos datos de instancia se pueden modificar.

CA2122: No exponer indirectamente métodos con peticiones de vínculos

Un miembro público o protegido tiene peticiones de vínculos y lo llama un miembro que no realiza ninguna comprobación de seguridad. Una solicitud de vínculo sólo comprueba los permisos del llamador inmediato.

CA2114: La seguridad del método debería ser un supraconjunto del tipo

Un método no debe tener seguridad declarativa en el nivel de método y en el nivel de tipo para la misma acción.

CA2123: Las peticiones de vínculos de reemplazo deberían ser idénticas a la base

Esta regla compara un método con su método base, que es una interfaz o un método virtual de otro tipo y, a continuación, compara las solicitudes de vínculos en cada uno. Si se infringe esta regla, un llamador malintencionado puede omitir la petición de vínculo tan solo con llamar al método no seguro.

CA2111: Los punteros no deberían estar visibles

Un puntero no es privado, interno ni de solo lectura. El código malintencionado puede cambiar el valor del puntero, lo que podría permitir el acceso a ubicaciones arbitrarias en memoria o generar errores del sistema o la aplicación.

CA2108: Revisar la seguridad declarativa en los tipos de valor

Un tipo de valor público o protegido está protegido por acceso a datos o peticiones de vínculos.

CA2107: Revisar el uso de Deny y PermitOnly

El método PermitOnly y las acciones de seguridad de CodeAccessPermission.Deny solamente se deben utilizar si se conoce en profundidad la seguridad de .NET Framework. Debería realizarse una revisión de la seguridad del código que utiliza estas acciones de seguridad.

CA2103: Revisar la seguridad imperativa

Un método utiliza la seguridad imperativa y podría estar creando el permiso utilizando la información de estado y los valores devueltos que pueden cambiar mientras la solicitud está activa. Utilice la seguridad declarativa siempre que sea posible.

CA2100: Revisar las consultas SQL en busca de vulnerabilidades de seguridad

Un método establece la propiedad System.Data.IDbCommand.CommandText utilizando una cadena que se construye partiendo de un argumento de cadena para el método. Esta regla supone que el argumento de cadena contiene datos proporcionados por el usuario. Una cadena de comandos de SQL generada a partir de datos proporcionados por el usuario es vulnerable a ataques de inserción de SQL.

CA2118: Revisar el uso de SuppressUnmanagedCodeSecurityAttribute

SuppressUnmanagedCodeSecurityAttribute cambia el comportamiento del sistema de seguridad predeterminado en los miembros que ejecutan código no administrado que utiliza la interoperabilidad COM o la invocación de plataforma. Este atributo se utiliza principalmente para aumentar el rendimiento; sin embargo, las mejoras de rendimiento suponen riesgos de seguridad importantes.

CA2109: Revisar los controladores de eventos visibles

Se detectó un método de control de eventos público o protegido. No se deberían exponer los métodos de control de eventos a menos que sea absolutamente necesario.

CA2119: Sellar los métodos que cumplan las interfaces privadas

Un tipo público heredable proporciona una implementación de método reemplazable de una interfaz interna (Friend en Visual Basic). Para corregir una infracción de esta regla, impida que el método sea reemplazado fuera del ensamblado.

CA2106: Asegurar aserciones

Un método valida un permiso y no se realiza ninguna comprobación de seguridad en el llamador. Validar un permiso de seguridad sin realizar ninguna comprobación de seguridad puede dejar una debilidad de seguridad explotable en el código.

CA2120: Proteger los constructores de serializaciones

Este tipo tiene un constructor que toma un objeto System.Runtime.Serialization.SerializationInfo y un objeto System.Runtime.Serialization.StreamingContext (la firma del constructor de serialización). Una comprobación de seguridad no protege este constructor, pero protege uno o más constructores regulares del tipo.

CA2112: Los tipos seguros no deberían exponer campos

Un tipo público o protegido contiene campos públicos y está protegido por peticiones de vínculos. Si el código tiene acceso a una instancia de tipo que está protegida por una solicitud de vínculo, el código no cumplirá la solicitud para obtener acceso a los campos del tipo.

CA2136: Los miembros no deben tener anotaciones de transparencia en conflicto

No puede haber código crítico en un ensamblado 100% transparente. Esta regla analiza los ensamblados 100% transparentes para detectar cualquier anotación de SecurityCritical en los niveles de tipo, campo y método.

CA2147: Los métodos transparentes no pueden usar aserciones de seguridad

Esta regla analiza todos los métodos y tipos de un ensamblado que es 100% transparente o tiene una mezcla de transparente y crítico, y marca cualquier uso declarativo o imperativo de Assert.

CA2140: El código transparente no debe hacer referencia a elementos críticos para la seguridad

Los métodos que se marcan con el atributo SecurityTransparentAttribute llaman a miembros no públicos marcados como SecurityCritical. Esta regla analiza todos los métodos y tipos de un ensamblado que tiene una mezcla de transparente y crítico, y marca las llamadas desde código transparente a código crítico no público que no están marcadas como SecurityTreatAsSafe.

CA2121: Los constructores estáticos deberían ser privados

El sistema llama al constructor estático antes de crear la primera instancia del tipo o antes de hacer referencia a cualquier miembro estático. Si un constructor estático no es privado, se puede llamar a través de un código distinto del sistema. En función de las operaciones que se realizan en el constructor, esto puede producir un comportamiento inesperado.

CA2126: Las peticiones de vínculos de tipos requieren peticiones de herencias

Un tipo público no sellado está protegido con una petición de vínculo y tiene un método reemplazable. Ni el tipo ni el método están protegidos con una petición de herencia.

CA2124: Incluir cláusulas Finally vulnerables en un bloque Try externo

Un método público o protegido contiene un bloque try/finally. El bloque finally aparece para restablecer el estado de seguridad y no se incluye a sí mismo en un bloque finally.