Partager via


Conseils de sécurité Microsoft 3137909

Les vulnérabilités dans les modèles ASP.NET pourraient autoriser la falsification

Publication : 9 février 2016 | Mise à jour : 10 février 2016

Version : 1.1

Résumé

Microsoft publie cet avis de sécurité pour fournir des informations sur une vulnérabilité dans les versions publiques de Visual Studio 2013, Visual Studio 2015, ASP.NET MVC5 et ASP.NET MVC6. Cet avis fournit également des conseils sur ce que les développeurs peuvent faire pour s’assurer que les contrôles et les composants qu’ils ont créés ne sont pas soumis à la vulnérabilité.

Microsoft est conscient d’une vulnérabilité de sécurité dans les versions publiques de Visual Studio 2013 et Visual Studio 2015 qui pourraient être utilisées dans un scénario d’attaque de falsification de requête intersite (CSRF) sur les applications web créées à l’aide des modèles de projet ASP.NET affectés. Les modèles de projet Microsoft ASP.NET MVC5 et ASP.NET MVC6 sont utilisés par les développeurs de logiciels comme modèles de démarrage pour les nouvelles applications web.

Facteurs d’atténuation

  • L’authentification à deux facteurs (2FA) n’est pas activée par défaut dans les applications générées. Si un développeur n’a pas activé 2FA en fonction du numéro de téléphone d’un utilisateur, il n’y a aucun impact sur la sécurité si le numéro de téléphone est supprimé.

Faq sur les conseils

Comment un attaquant pourrait-il exploiter la vulnérabilité ?
Un attaquant peut utiliser la falsification de requête intersite (CSRF) pour envoyer une demande à une application web générée avec les modèles vulnérables, puis supprimer le numéro de téléphone d’un utilisateur authentifié de la base de données d’identité ASP.NET. Le résultat de la vulnérabilité exploitée supprime tout mécanisme d’authentification à deux facteurs (2FA) qui s’appuie sur un numéro de téléphone. Le mot de passe de l’utilisateur n’est pas affecté.

Que fait la mise à jour ?
La mise à jour corrige les modèles de projet Visual Studio 2015 ASP.NET pour MVC5 et MVC6.

Les mises à jour du modèle affectent uniquement les nouvelles applications. Pour cette raison, Microsoft recommande vivement aux développeurs qui ont créé des applications web à l’aide de ces modèles d’agir immédiatement, répertoriés dans la section Actions suggérées, d’évaluer leurs applications web pour l’exposition à la vulnérabilité, puis d’utiliser les solutions de contournement de cette section pour apporter des modifications de code pour mettre à jour leurs applications afin de les protéger des personnes vulnérables.

Si vous exécutez Visual Studio 2013, vous devez utiliser les étapes de contournement répertoriées dans la section Actions suggérées pour mettre à jour vos applications manuellement chaque fois que vous avez utilisé les modèles affectés.

Comment faire appliquer la mise à jour ?

  1. Démarrez Visual Studio.
  2. Dans le menu Outils, choisissez Extensions et Mises à jour.
  3. Développez l’arborescence Mises à jour.
  4. Sous Product Mises à jour localisez les deux entrées suivantes :
    • Microsoft ASP.NET et Web Tools
    • Outils et frameworks web Microsoft ASP.NET
  5. Sélectionnez chaque mise à jour, puis cliquez sur Mettre à jour.

Actions suggérées

Les informations de contournement suivantes détaillent les modifications que vous devez apporter aux applications existantes créées à partir des modèles de projet ASP.NET.

Visual Studio 2015 MVC 5 et Visual Studio 2013 MVC 5
Pour C#

  1. À partir du répertoire Contrôleurs, chargez ManageController.cs.

  2. Recherchez Remove Téléphone Number() (ligne 199).

  3. Le code du modèle, sans personnalisation, s’affiche comme suit :

     public async Task<actionresult> RemovePhoneNumber()
     {
         var result = await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), null);
         if (!result.Succeeded)
         {
             return RedirectToAction("Index", new { Message = ManageMessageId.Error });
         }
         var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
         if (user != null)
         {
             await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
         }
         return RedirectToAction("Index", new { Message = ManageMessageId.RemovePhoneSuccess });
     }
    
  4. Ajoutez les attributs [HttpPost] et [ValidateAntiForgeryToken] à la définition de fonction, afin que le code s’affiche comme suit :

     [HttpPost]
     [ValidateAntiForgeryToken]
     public async Task</actionresult><actionresult> RemovePhoneNumber()
     {
         var result = await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), null);
         if (!result.Succeeded)
         {
             return RedirectToAction("Index", new { Message = ManageMessageId.Error });
         }
         var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
         if (user != null)
         {
             await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false);
         }
         return RedirectToAction("Index", new { Message = ManageMessageId.RemovePhoneSuccess });
     }
    
  5. Dans le dossier Views/Manage , chargez le fichier Index.cshtml.

  6. <Rechercher dt> Téléphone Number :</dt> (Ligne 40)

  7. Le code du modèle, sans personnalisation s’affiche comme suit :

     <dt>Phone Number:</dt>
    
@(Modèle. Téléphone Number ?? « None ») [ @if (Model.TéléphoneNombre != null) { @Html.ActionLink(« Change », « Add Téléphone Number ») @ :  |  @Html.ActionLink(« Remove », « Remove Téléphone Number ») } else { @Html.ActionLink(« Add », « Add Téléphone Number ») } ]
```
  1. Modifiez le code d’affichage comme suit :

     <dt>Phone Number:</dt>
    
@(Modèle. Téléphone Number ?? « None ») @if (Model.TéléphoneNombre != null) {
using (Html.BeginForm(« Remove Téléphone Number », « Manage », FormMethod.Post, new { @class = « form-horizontal », role = « form » })) { @Html.AntiForgeryToken() } } else { }
```
  1. Recompilez votre application, puis redéployez-la.

Pour Visual Basic

  1. À partir du répertoire Contrôleurs, chargez ManageController.cs.

  2. Recherchez Remove Téléphone Number() (ligne 164).

  3. Le code du modèle, sans personnalisation s’affiche comme suit :

         Public Async Function RemovePhoneNumber() As Task(Of ActionResult)
             Dim result = Await UserManager.SetPhoneNumberAsync(User.Identity.GetUserId(), Nothing)
             If Not result.Succeeded Then
                 Return RedirectToAction("Index", New With {
                     .Message = ManageMessageId.[Error]
                 })
             End If
             Dim userInfo = Await UserManager.FindByIdAsync(User.Identity.GetUserId())
             If userInfo IsNot Nothing Then
                 Await SignInManager.SignInAsync(userInfo, isPersistent:=False, rememberBrowser:=False)
             End If
             Return RedirectToAction("Index", New With {
                 .Message = ManageMessageId.RemovePhoneSuccess
             })
         End Function
    
  4. Ajoutez les attributs HttpPost> et <ValidateAntiForgeryToken> à la définition de fonction pour les afficher comme suit :<

         <httppost>
    
  1. Dans le dossier Views/Manage, chargez le fichier Index.vbhtml.

  2. <Rechercher dt> Téléphone Number :</dt> (Ligne 37)

  3. Le code du modèle, sans personnalisation, s’affiche comme suit :

                 <dt>Phone Number:</dt>
    
@(If(Model.TéléphoneNombre, « None ») [ @If (Model.TéléphoneNombre
Nothing) Puis @Html.ActionLink(« Change », « Add Téléphone Number ») @ :  |  @Html.ActionLink(« Remove », « Remove Téléphone Number ») Else @Html.ActionLink(« Add », « Add Téléphone Number ») End If ]
```
  1. Modifiez le code d’affichage comme suit :

                 <dt>Phone Number:</dt>
    
@(If(Model.TéléphoneNombre, « None ») @If (Model.TéléphoneNombre
Rien) Puis @
@ @Using Html.BeginForm(« Remove Téléphone Number », « Manage », FormMethod.Post, New With {.class = « form-horizontal », .role = « form"}) @Html.AntiForgeryToken @ End Using Else @ End If
```
  1. Recompilez l’application, puis redéployez-la.

Visual Studio 2015 MVC 6
Pour C#

  1. À partir du répertoire Contrôleurs, chargez ManageController.cs.

  2. Recherchez Remove Téléphone Number() (ligne 178).

  3. Le code du modèle, sans personnalisation s’affiche comme suit :

     // GET: /Manage/RemovePhoneNumber
     [HttpGet]
     public async Task<iactionresult> RemovePhoneNumber()
     {
          var user = await GetCurrentUserAsync();
          if (user != null)
          {
              var result = await _userManager.SetPhoneNumberAsync(user, null);
              if (result.Succeeded)
              {
                  await _signInManager.SignInAsync(user, isPersistent: false);
                  return RedirectToAction(nameof(Index), new { Message = ManageMessageId.RemovePhoneSuccess });
             }
         }
         return RedirectToAction(nameof(Index), new { Message = ManageMessageId.Error });
     }
    
  4. Supprimez l’attribut [HttpGet], puis ajoutez les attributs [HttpPost] et [ValidateAntiForgeryToken] à la définition de fonction, afin que le code s’affiche comme suit :

      [HttpPost]
      [ValidateAntiForgeryToken]
     public async Task</iactionresult><iactionresult> RemovePhoneNumber()
     {
         var user = await GetCurrentUserAsync();
         if (user != null)
         {
             var result = await _userManager.SetPhoneNumberAsync(user, null);
             if (result.Succeeded)
             {
                 await _signInManager.SignInAsync(user, isPersistent: false);
                 return RedirectToAction(nameof(Index), new { Message = ManageMessageId.RemovePhoneSuccess });
             }
         }
         return RedirectToAction(nameof(Index), new { Message = ManageMessageId.Error });
    }
    
  5. Dans le dossier Views/Manage , chargez le fichier Index.cshtml.

  6. Remplacez complètement le fichier d’affichage afin qu’il s’affiche comme suit :

     @model IndexViewModel
     @{
         ViewData["Title"] = "Manage your account";
     }
    
     <h2>@ViewData["Title"].</h2>
    

@ViewData["StatusMessage"]

    <div>

Modifier les paramètres de votre compte


Mot de passe :
@if (Model.HasPassword) { } else { }
Connexions externes :
@Model.Logins.Count [  Manage  ]
Numéro de téléphone :
Téléphone Nombres peut servir de deuxième facteur de vérification dans l’authentification à deux facteurs. Consultez cet article pour plus d’informations sur la configuration de cette application ASP.NET pour prendre en charge l’authentification à deux facteurs à l’aide de SMS. @*@(Modèle. Téléphone Number ?? « None ») @if (Model.TéléphoneNombre != null) {
[]
} else { }* @
Authentification à deux facteurs :
Il n’existe aucun fournisseur d’authentification à deux facteurs configuré. Consultez cet article pour configurer cette application pour prendre en charge l’authentification à deux facteurs. @*@if (Model.TwoFactor) {
Activé []
} else {
[] Désactivé
}* @
```
  1. Recompilez votre application, puis redéployez-la.

Pour Visual Basic

  • ASP.Net Core (précédemment ASP.NET 5) ne prend pas en charge Visual Basic.

Actions suggérées supplémentaires

  • Téléchargez les mises à jour de l’outil Visual Studio directement à l’adresse suivante :

  • Protéger votre PC
    Nous continuons à encourager les clients à suivre nos conseils sur la protection de votre ordinateur pour activer un pare-feu, obtenir des mises à jour logicielles et installer des logiciels antivirus. Pour plus d’informations, consultez Microsoft Coffre ty &Security Center.

  • Conserver les logiciels Microsoft mis à jour
    Les utilisateurs exécutant le logiciel Microsoft doivent appliquer les dernières mises à jour de sécurité Microsoft pour vous assurer que leurs ordinateurs sont aussi protégés que possible. Si vous ne savez pas si votre logiciel est à jour, visitez Microsoft Update, analysez votre ordinateur pour connaître les mises à jour disponibles et installez les mises à jour de haute priorité qui vous sont proposées. Si vous avez activé et configuré la mise à jour automatique pour fournir des mises à jour pour les produits Microsoft, les mises à jour sont remises à vous lors de leur publication, mais vous devez vérifier qu’elles sont installées.

Autres informations

Commentaires

  • Vous pouvez fournir des commentaires en remplissant le formulaire Aide et support Microsoft, contactez-nous.

Support

  • Les clients du États-Unis et du Canada peuvent recevoir un soutien technique du support technique. Pour plus d’informations, consultez Aide et support Microsoft.
  • Les clients internationaux peuvent recevoir du support de leurs filiales Microsoft locales. Pour plus d’informations, consultez Support international.
  • Microsoft TechNet Security fournit des informations supplémentaires sur la sécurité dans les produits Microsoft.

Exclusion de responsabilité

Les informations fournies dans cet avis sont fournies « tel quel » sans garantie quelconque. Microsoft exclut toutes les garanties, expresses ou implicites, y compris les garanties de marchandabilité et d’adéquation à un usage particulier. En aucun cas, Microsoft Corporation ou ses fournisseurs ne sont responsables de dommages-intérêts, y compris les dommages directs, indirects, accessoires, accessoires, les pertes de bénéfices commerciaux ou les dommages spéciaux, même si Microsoft Corporation ou ses fournisseurs ont été informés de la possibilité de tels dommages- intérêts. Certains États n’autorisent pas l’exclusion ou la limitation de responsabilité pour des dommages indirects ou accessoires afin que la limitation ci-dessus ne s’applique pas.

Révisions

  • V1.0 (9 février 2016) : Avis publié.
  • V1.1 (10 février 2016) : avis mis à jour pour inclure des informations de téléchargement pour Microsoft ASP.NET Web Frameworks, and Tools et Microsoft ASP.NET et Web Tools. Il s’agit d’une modification d’information uniquement.

Page générée 2016-02-19 14 :36-08 :00.