Compartir a través de


Incluir cláusulas Finally vulnerables en un bloque Try externo

Actualización: noviembre 2007

Nombre de tipo

WrapVulnerableFinallyClausesInOuterTry

Identificador de comprobación

CA2124

Categoría

Microsoft.Security

Cambio problemático

No problemático

Motivo

Un método público o protegido contiene un bloque try/finally. El bloque finally restablece el estado de seguridad y no se agrega a un bloque finally.

Descripción de la regla

Esta regla busca bloques try/finally que pueden ser vulnerables a los filtros de excepción malintencionados de la pila de llamadas. Si las operaciones reservadas como la suplantación aparecen en bloques try, y se produce una excepción, el filtro puede ejecutarse antes que el bloque finally. Para obtener un ejemplo de suplantación, esto significa que el filtro se ejecutaría como un usuario suplantado. Los filtros actualmente sólo pueden implementarse en Visual Basic.

Cómo corregir infracciones

Coloque el bloque try/finally liberado en un bloque try externo. Vea el ejemplo que sigue. Esto obliga al bloque finally a ejecutarse antes que el código del filtro.

Cuándo suprimir advertencias

No suprima las advertencias de esta regla.

Ejemplo de seudocódigo

Descripción

El pseudocódigo siguiente muestra el modelo detectado por esta regla.

Código

try {
   // Do some work.
   Impersonator imp = new Impersonator("John Doe");
   imp.AddToCreditCardBalance(100);
}
finally {
   // Reset security state.
   imp.Revert();
}

Ejemplo

El pseudocódigo siguiente muestra el modelo que puede utilizarse para proteger el código y cumplir esta regla.

try {
     try {
        // Do some work.
     }
     finally {
        // Reset security state.
     }
}
catch()
{
    throw;
}