CA2124 : Incluez dans un wrapper les clauses finally vulnérables dans un bloc try externe
Élément | Valeur |
---|---|
ID de la règle | CA2124 |
Category | Microsoft.Security |
Modification avec rupture | Sans rupture |
Cause
Dans les versions 1.0 et 1.1 du .NET Framework, une méthode publique ou protégée contient un bloc try
/catch
/finally
. Le bloc finally
semble réinitialiser l’état de sécurité et il n’est pas placé dans un bloc finally
.
Notes
Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.
Description de la règle
Cette règle localise les blocs try
/finally
dans le code qui cible les versions 1.0 et 1.1 du .NET Framework susceptibles d’être vulnérables face à des filtres d’exception malveillants présents dans la pile d’appels. Si des opérations sensibles comme l’emprunt d’identité se produisent dans le bloc try et qu’une exception est levée, le filtre peut s’exécuter avant le bloc finally
. Pour l’exemple d’emprunt d’identité, cela signifie que le filtre s’exécuterait en tant qu’utilisateur impersonné. Les filtres sont actuellement implémentables uniquement en Visual Basic.
Notes
Dans les versions 2.0 et ultérieures du .NET Framework, le runtime protège automatiquement un bloc try
/catch
/ finally
contre les filtres d’exception malveillants, si la réinitialisation se produit directement dans la méthode qui contient le bloc d’exception.
Comment corriger les violations
Placez le bloc try
/finally
désenveloppé dans un bloc try externe. Observez le deuxième exemple qui suit. Celui-ci force l’exécution de finally
avant le code de filtre.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple de pseudo-code
Description
Le pseudo-code suivant illustre le modèle détecté par cette règle.
try {
// Do some work.
Impersonator imp = new Impersonator("John Doe");
imp.AddToCreditCardBalance(100);
}
finally {
// Reset security state.
imp.Revert();
}
Le pseudo-code suivant montre le modèle que vous pouvez utiliser pour protéger votre code et respecter cette règle.
try {
try {
// Do some work.
}
finally {
// Reset security state.
}
}
catch()
{
throw;
}
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour