Sdílet prostřednictvím


Poradce microsoftu pro zabezpečení 3137909

Chyby zabezpečení v šablonách ASP.NET by mohly umožnit manipulaci

Publikováno: 9. února 2016 | Aktualizováno: 10. února 2016

Verze: 1.1

Shrnutí

Společnost Microsoft vydává tento poradce pro zabezpečení, který poskytuje informace o ohrožení zabezpečení ve veřejných verzích sady Visual Studio 2013, Visual Studio 2015, ASP.NET MVC5 a ASP.NET MVC6. Toto rady také poskytuje pokyny k tomu, co můžou vývojáři dělat, aby ovládací prvky a komponenty, které vytvořili, nebyly vystaveny ohrožení zabezpečení.

Společnost Microsoft si uvědomuje ohrožení zabezpečení ve veřejných verzích sady Visual Studio 2013 a Visual Studio 2015, které je možné použít ve scénáři útoku CSRF (cross-site request forgery) proti webovým aplikacím vytvořeným pomocí ovlivněných šablon projektů ASP.NET. Šablony projektů Microsoft ASP.NET MVC5 a ASP.NET MVC6 používají vývojáři softwaru jako úvodní šablony pro nové webové aplikace.

Faktory pro zmírnění rizika

  • Dvojúrovňové ověřování (2FA) není ve výchozím nastavení povolené v generovaných aplikacích. Pokud vývojář nepovolil 2FA na základě telefonního čísla uživatele, nebude mít bezpečnostní dopad na odebrání telefonního čísla.

Nejčastější dotazy k poradenství

Jak by mohl útočník zneužít tuto chybu zabezpečení?
Útočník by mohl použít k odeslání požadavku na webovou aplikaci vygenerovanou pomocí ohrožených šablon žádost o padělání žádostí mezi weby a pak odebrat telefonní číslo ověřeného uživatele z databáze ASP.NET Identity Database. Výsledkem zneužití chyby zabezpečení je odebrání jakéhokoli mechanismu dvojúrovňového ověřování (2FA), který závisí na telefonním čísle. Heslo uživatele není ovlivněno.

Co aktualizace dělá?
Aktualizace opraví šablony projektů sady Visual Studio 2015 ASP.NET pro MVC5 a MVC6.

Aktualizace šablony mají vliv jenom na nové aplikace. Microsoft proto důrazně doporučuje, aby vývojáři, kteří pomocí těchto šablon vytvořili webové aplikace, okamžitě udělali akci, uvedenou v části Navrhované akce , vyhodnotili své webové aplikace za účelem ohrožení zabezpečení a pak pomocí alternativních řešení v této části udělali změny kódu, aby aktualizovali své aplikace, aby je chránily před ohrožením zabezpečení.

Pokud používáte Visual Studio 2013, musíte použít alternativní řešení uvedené v části Navrhované akce a aktualizovat aplikace ručně při každém použití ovlivněných šablon.

Návody aktualizaci použít?

  1. Spusťte Visual Studio.
  2. V nabídce Nástroje zvolte Rozšíření a Aktualizace.
  3. Rozbalte strom Aktualizace.
  4. V části Produkt Aktualizace vyhledejte následující dvě položky:
    • Microsoft ASP.NET a webové nástroje
    • Webové architektury a nástroje microsoft ASP.NET
  5. Vyberte každou aktualizaci a klikněte na Aktualizovat.

Navrhované akce

Následující alternativní řešení obsahuje podrobnosti o změnách, které musíte provést u existujících aplikací vytvořených z šablon projektu ASP.NET.

Visual Studio 2015 MVC 5 a Visual Studio 2013 MVC 5
Pro C#

  1. Z adresáře Kontrolery načtěte ManageController.cs.

  2. Vyhledejte remove Telefon Number() (řádek 199).

  3. Kód šablony bez jakéhokoli vlastního nastavení se zobrazí takto:

     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. Do definice funkce přidejte atributy [HttpPost] a [ValidateAntiForgeryToken], aby se kód zobrazil takto:

     [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. Ze složky Views/Manage načtěte soubor Index.cshtml.

  6. <Vyhledejte dt> Telefon Number:</dt> (řádek 40)

  7. Kód šablony bez jakéhokoli vlastního nastavení se zobrazí takto:

     <dt>Phone Number:</dt>
    
@(Model. Telefon Číslo ?? "None") [ @if (Model.TelefonNumber != null) { @Html.ActionLink("Change"; "Add Telefon Number") @:  |  @Html.ActionLink("Remove"; "Remove"; "Remove Telefon Number") } else { @Html.ActionLink("Add"; "Add Telefon Number") } ]
```
  1. Změňte kód zobrazení tak, aby se zobrazil takto:

     <dt>Phone Number:</dt>
    
@(Model. Telefon Číslo ?? @if "None") (Model.TelefonČíslo != null) {
using (Html.BeginForm("Remove Telefon Number", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() } } else { }
```
  1. Znovu zkompilujte aplikaci a pak ji znovu nasaďte.

Pro Visual Basic

  1. Z adresáře Kontrolery načtěte ManageController.cs.

  2. Vyhledejte remove Telefon Number() (řádek 164).

  3. Kód šablony bez jakéhokoli vlastního nastavení se zobrazí takto:

         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. <Přidejte atributy HttpPost> a <ValidateAntiForgeryToken> do definice funkce, aby se zobrazily následujícím způsobem:

         <httppost>
    
  1. Ze složky Views/Manage načtěte soubor Index.vbhtml.

  2. <Vyhledejte dt> Telefon Number:</dt> (řádek 37)

  3. Kód šablony bez jakéhokoli vlastního nastavení se zobrazí takto:

                 <dt>Phone Number:</dt>
    
@(If(Model.TelefonNumber, "None")) [ @If (Model.TelefonČíslo
Nothing) Then @Html.ActionLink("Change"; "Add Telefon Number") @:  |  @Html.ActionLink("Remove"; "Remove Telefon Number") Else @Html.ActionLink("Add"; "Add Telefon Number") End If ]
```
  1. Změňte kód zobrazení tak, aby se zobrazil takto:

                 <dt>Phone Number:</dt>
    
@(If(Model.TelefonNumber, "None")) @If (Model.TelefonČíslo
Nic) Pak @
@ @Using Html.BeginForm("Remove Telefon Number", "Manage", FormMethod.Post, New With {.class = "form-horizontal", .role = "form"}) @Html.AntiForgeryToken @ End using Else @ End If
```
  1. Znovu zkompilujte aplikaci a pak ji znovu nasaďte.

Visual Studio 2015 MVC 6
Pro C#

  1. Z adresáře Kontrolery načtěte ManageController.cs.

  2. Vyhledejte remove Telefon Number() (řádek 178).

  3. Kód šablony bez jakéhokoli vlastního nastavení se zobrazí takto:

     // 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. Odeberte atribut [HttpGet] a pak do definice funkce přidejte atributy [HttpPost] a [ValidateAntiForgeryToken], aby se kód zobrazil takto:

      [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. Ze složky Views/Manage načtěte soubor Index.cshtml.

  6. Úplně nahraďte soubor zobrazení tak, aby se zobrazil takto:

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

@ViewData["StatusMessage"]

    <div>

Změna nastavení účtu


Password:
@if (Model.HasPassword) { } else { }
Externí přihlášení:
@Model.Logins.Count [  Manage  ]
číslo Telefon:
Telefon čísla se dají použít jako druhý faktor ověření dvojúrovňového ověřování. Podrobnosti o nastavení této ASP.NET aplikace pro podporu dvojúrovňového ověřování pomocí sms najdete v tomto článku . @*@(Model. Telefon Číslo ?? @if "None") (Model.TelefonČíslo != null) {
[]
} else { }* @
Dvojúrovňové ověřování:
Nejsou nakonfigurováni žádní poskytovatelé dvoufaktorového ověřování. V tomto článku najdete informace o nastavení této aplikace pro podporu dvojúrovňového ověřování. @*@if (Model.TwoFactor) {
Povoleno []
} else {
[] Zakázáno
}* @
```
  1. Znovu zkompilujte aplikaci a pak ji znovu nasaďte.

Pro Visual Basic

  • ASP.Net Core (dříve ASP.NET 5) nepodporuje Visual Basic.

Další navrhované akce

  • Stáhněte si aktualizace nástroje Visual Studio přímo na adrese:

  • Ochrana počítače
    Nadále doporučujeme zákazníkům postupovat podle našich pokynů k ochraně počítače při povolování brány firewall, získávání aktualizací softwaru a instalaci antivirového softwaru. Další informace najdete v tématu Microsoft Sejf ty & Security Center.

  • Udržovat software společnosti Microsoft aktualizovaný
    Uživatelé, kteří používají software společnosti Microsoft, by měli použít nejnovější aktualizace zabezpečení společnosti Microsoft, aby zajistili, že jsou jejich počítače co nejvíce chráněné. Pokud si nejste jistí, jestli je váš software aktuální, navštivte web Microsoft Update, vyhledejte v počítači dostupné aktualizace a nainstalujte všechny aktualizace s vysokou prioritou, které jsou vám nabízeny. Pokud máte povolenou a nakonfigurovanou automatickou aktualizaci pro produkty Microsoftu, budou vám aktualizace doručeny při jejich vydání, ale měli byste ověřit, že jsou nainstalované.

Další informace

Váš názor

  • Zpětnou vazbu můžete poskytnout vyplněním formuláře nápovědy a podpory Microsoftu, kontaktujte nás oddělení služeb zákazníkům.

Technická podpora

  • Zákazníci v USA a Kanadě můžou získat technickou podporu od podpory zabezpečení. Další informace naleznete v nápovědě a podpoře společnosti Microsoft.
  • Mezinárodní zákazníci můžou získat podporu od místních poboček Microsoftu. Další informace naleznete v tématu Mezinárodní podpora.
  • Microsoft TechNet Security poskytuje další informace o zabezpečení v produktech Microsoftu.

Právní doložka

Informace uvedené v tomto poradenství jsou poskytovány "tak, jak jsou" bez záruky jakéhokoli druhu. Společnost Microsoft odmítá všechny záruky, ať už výslovné nebo předpokládané, včetně záruk prodejnosti a vhodnosti pro určitý účel. V žádném případě společnost Microsoft Corporation nebo její dodavatelé nenese odpovědnost za jakékoli škody, včetně přímých, nepřímých, náhodných, následných, ztrát obchodních zisků nebo zvláštních škod, a to i v případě, že společnost Microsoft Corporation nebo její dodavatelé byli upozorněni na možnost těchto škod. Některé státy neumožňují vyloučení nebo omezení odpovědnosti za následné nebo náhodné škody, takže výše uvedené omezení nemusí platit.

Revize

  • V1.0 (9. února 2016): Poradce publikováno.
  • V1.1 (10. února 2016): Informační zpravodaj byl aktualizován tak, aby obsahoval informace o stažení pro webové architektury Microsoft ASP.NET a nástroje a nástroje Microsoft ASP.NET a webové nástroje. Jedná se pouze o informační změnu.

Stránka vygenerovaná 2016-02-19 14:36-08:00.