Microsoft Security Advisory 3137909

Sicherheitsrisiken in ASP.NET-Vorlagen könnten Manipulationen zulassen

Veröffentlicht: 9. Februar 2016 | Aktualisiert: 10. Februar 2016

Version: 1.1

Kurzfassung

Microsoft veröffentlicht diese Sicherheitsempfehlung, um Informationen zu einer Sicherheitsanfälligkeit in den öffentlichen Versionen von Visual Studio 2013, Visual Studio 2015, ASP.NET MVC5 und ASP.NET MVC6 bereitzustellen. Diese Empfehlung enthält auch Anleitungen dazu, was Entwickler tun können, um sicherzustellen, dass die von ihnen erstellten Steuerelemente und Komponenten nicht der Sicherheitsanfälligkeit unterliegen.

Microsoft ist sich einer Sicherheitslücke in den öffentlichen Versionen von Visual Studio 2013 und Visual Studio 2015 bewusst, die in einem Website-Anforderungs-Fälschungsszenario (CSRF) gegen Webanwendungen verwendet werden können, die mit den betroffenen ASP.NET Projektvorlagen erstellt wurden. Die Microsoft ASP.NET MVC5- und ASP.NET MVC6-Projektvorlagen werden von Softwareentwicklern als Startvorlagen für neue Webanwendungen verwendet.

Mildernde Faktoren

  • Die zweistufige Authentifizierung (2FA) ist in generierten Anwendungen nicht standardmäßig aktiviert. Wenn ein Entwickler 2FA nicht basierend auf der Telefonnummer eines Benutzers aktiviert hat, gibt es keine Sicherheitsbeeinträchtigungen, wenn die Telefonnummer entfernt wird.

Häufig gestellte Fragen zu Beratungen

Wie kann ein Angreifer die Sicherheitsanfälligkeit ausnutzen?
Ein Angreifer könnte websiteübergreifende Anforderungsfälschung (CSRF) verwenden, um eine Anforderung an eine Webanwendung zu senden, die mit den anfälligen Vorlagen generiert wurde, und dann die Telefonnummer eines authentifizierten Benutzers aus der ASP.NET Identitätsdatenbank zu entfernen. Durch das Ergebnis der ausgenutzten Sicherheitsanfälligkeit werden alle zweistufigen Authentifizierungsmechanismen (2FA) entfernt, die auf einer Telefonnummer basieren. Das Kennwort des Benutzers ist nicht betroffen.

Was geschieht mit dem Update?
Das Update korrigiert die Visual Studio 2015-ASP.NET Projektvorlagen für MVC5 und MVC6.

Die Vorlagenaktualisierungen wirken sich nur auf neue Anwendungen aus. Aus diesem Grund empfiehlt Microsoft dringend, dass Entwickler, die webanwendungen mit diesen Vorlagen erstellt haben, sofortige Maßnahmen ergreifen, die im Abschnitt "Vorgeschlagene Aktionen " aufgeführt sind, ihre Webanwendungen für die Gefährdung der Sicherheitsanfälligkeit auszuwerten und dann die Problemumgehungen in diesem Abschnitt zu verwenden, um Codeänderungen vorzunehmen, um ihre Anwendungen zu aktualisieren, um sie vor anfälligen Schutz zu schützen.

Wenn Sie Visual Studio 2013 ausführen, müssen Sie die im Abschnitt "Vorgeschlagene Aktionen" aufgeführten Problemumgehungsschritte verwenden, um Ihre Anwendungen jedes Mal manuell zu aktualisieren, wenn Sie die betroffenen Vorlagen verwendet haben.

Gewusst wie das Update anwenden?

  1. Starten Sie Visual Studio.
  2. Wählen Sie im Menü "Extras" die Option "Erweiterungen und Updates" aus.
  3. Erweitern Sie die Aktualisierungsstruktur.
  4. Suchen Sie unter "Produktupdates " die folgenden beiden Einträge:
    • Microsoft ASP.NET and Web Tools
    • Microsoft ASP.NET Web Frameworks und Tools
  5. Wählen Sie jedes Update aus, und klicken Sie auf "Aktualisieren".

Vorgeschlagene Aktionen

In den folgenden Problemumgehungsinformationen werden die Änderungen beschrieben, die Sie an vorhandenen Anwendungen vornehmen müssen, die aus den ASP.NET Projektvorlagen erstellt wurden.

Visual Studio 2015 MVC 5 und Visual Studio 2013 MVC 5
Für C#

  1. Laden Sie ManageController.cs aus dem Verzeichnis "Controller".

  2. Suchen Sie nach Remove Telefon Number() (Zeile 199).

  3. Der Vorlagencode ohne Anpassung wird wie folgt angezeigt:

     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. Fügen Sie die Attribute [HttpPost] und [ValidateAntiForgeryToken] zur Funktionsdefinition hinzu, damit der Code wie folgt angezeigt wird:

     [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. Laden Sie aus dem Ordner "Views/Manage " die Datei Index.cshtml.

  6. Suchen Sie nach <dt Telefon Number:</dt>> (Zeile 40)

  7. Der Vorlagencode ohne Anpassung wird wie folgt angezeigt:

     <dt>Phone Number:</dt>
    
@(Modell. Telefon Number ?? "None") [ @if (Model.TelefonNumber != null) { @Html.ActionLink("Change", "Add Telefon Number") @:  |  @Html.ActionLink("Remove", "Remove Telefon Number") } else { @Html.ActionLink("Add", "Add Telefon Number") } ]
```
  1. Ändern Sie den Ansichtscode so, dass er wie folgt angezeigt wird:

     <dt>Phone Number:</dt>
    
@(Modell. Telefon Number ?? "None") @if (Model.TelefonZahl != null) {
using (Html.BeginForm("Remove Telefon Number", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() } else { }
```
  1. Kompilieren Sie Ihre Anwendung erneut, und stellen Sie sie dann erneut zur Bereitstellung.

Für Visual Basic

  1. Laden Sie ManageController.cs aus dem Verzeichnis "Controller".

  2. Suchen Sie nach Remove Telefon Number() (Zeile 164).

  3. Der Vorlagencode ohne Anpassung wird wie folgt angezeigt:

         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. Fügen Sie die Attribute "HttpPost"> und <"ValidateAntiForgeryToken>" zur Funktionsdefinition hinzu, damit sie wie folgt angezeigt werden:<

         <httppost>
    
  1. Laden Sie im Ordner "Views/Manage" die Datei Index.vbhtml.

  2. <Suchen nach dt> Telefon Zahl:</dt> (Zeile 37)

  3. Der Vorlagencode wird ohne Anpassung wie folgt angezeigt:

                 <dt>Phone Number:</dt>
    
@(If(Model.TelefonNumber, "None")) [ @If (Model.TelefonAnzahl
Nothing) Then @Html.ActionLink("Change", "Add Telefon Number") @:  |  @Html.ActionLink("Remove", "Remove Telefon Number") Else @Html.ActionLink("Add", "Add Telefon Number") End If ]
```
  1. Ändern Sie den Ansichtscode so, dass er wie folgt angezeigt wird:

                 <dt>Phone Number:</dt>
    
@(If(Model.TelefonNumber, "None")) @If (Model.TelefonAnzahl
Nichts) Dann @
@ @Using Html.BeginForm("Remove Telefon Number", "Manage", FormMethod.Post, New With {.class = "form-horizontal", .role = "form"}) @Html.AntiForgeryToken @ End Using Else @ End If
```
  1. Kompilieren Sie die Anwendung erneut, und stellen Sie sie dann erneut zur Anwendung.

Visual Studio 2015 MVC 6
Für C#

  1. Laden Sie ManageController.cs aus dem Verzeichnis "Controller".

  2. Suchen Sie nach Remove Telefon Number() (Zeile 178).

  3. Der Vorlagencode ohne Anpassung wird wie folgt angezeigt:

     // 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. Entfernen Sie das [HttpGet] -Attribut, und fügen Sie dann die Attribute [HttpPost] und [ValidateAntiForgeryToken] zur Funktionsdefinition hinzu, damit der Code wie folgt angezeigt wird:

      [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. Laden Sie aus dem Ordner "Views/Manage " die Datei Index.cshtml.

  6. Ersetzen Sie die Ansichtsdatei vollständig so, dass sie wie folgt angezeigt wird:

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

@ViewData["StatusMessage"]

    <div>

Ändern der Kontoeinstellungen


Kennwort:
@if (Model.HasPassword) { } else { }
Externe Anmeldungen:
@Model.Logins.Count [  Verwalten  ]
Telefonnummer:
Telefon Zahlen können als zweiten Überprüfungsfaktor bei der zweistufigen Authentifizierung verwendet werden. Ausführliche Informationen zum Einrichten dieser ASP.NET Anwendung zur Unterstützung der zweistufigen Authentifizierung mithilfe von SMS finden Sie in diesem Artikel . @*@(Modell. Telefon Number ?? "None") @if (Model.TelefonZahl != null) {
[]
} else { }* @
Zweistufige Authentifizierung:
Es sind keine zweistufigen Authentifizierungsanbieter konfiguriert. In diesem Artikel finden Sie informationen zum Einrichten dieser Anwendung zur Unterstützung der zweistufigen Authentifizierung. @*@if (Model.TwoFactor) {
Aktiviert []
} else {
[] Deaktiviert
}* @
```
  1. Kompilieren Sie Ihre Anwendung erneut, und stellen Sie sie dann erneut zur Bereitstellung.

Für Visual Basic

  • ASP.Net Core (zuvor ASP.NET 5) unterstützt Visual Basic nicht.

Weitere vorgeschlagene Aktionen

  • Laden Sie die Visual Studio-Toolupdates direkt unter:

  • Schützen Ihres PCs
    Wir ermutigen Kunden weiterhin, unseren Richtlinien zum Schutz Ihres Computers zu folgen, eine Firewall zu aktivieren, Softwareupdates zu erhalten und Antivirensoftware zu installieren. Weitere Informationen finden Sie unter Microsoft Tresor ty & Security Center.

  • Aktualisieren der Microsoft-Software
    Benutzer, die Microsoft-Software ausführen, sollten die neuesten Microsoft-Sicherheitsupdates anwenden, um sicherzustellen, dass ihre Computer so geschützt wie möglich sind. Wenn Sie nicht sicher sind, ob Ihre Software auf dem neuesten Stand ist, besuchen Sie Microsoft Update, scannen Sie Ihren Computer auf verfügbare Updates, und installieren Sie alle updates mit hoher Priorität, die Ihnen angeboten werden. Wenn Sie die automatische Aktualisierung aktiviert und für die Bereitstellung von Updates für Microsoft-Produkte konfiguriert haben, werden die Updates an Sie übermittelt, wenn sie veröffentlicht werden, aber Sie sollten überprüfen, ob sie installiert sind.

Sonstige Informationen

Feedback

Unterstützung

Haftungsausschluss

Die in dieser Empfehlung bereitgestellten Informationen werden ohne Jegliche Garantie bereitgestellt. Microsoft lehnt alle Gewährleistungen ab, entweder ausdrücklich oder impliziert, einschließlich der Gewährleistungen der Händlerbarkeit und Eignung für einen bestimmten Zweck. In keinem Fall haftet die Microsoft Corporation oder seine Lieferanten für jegliche Schäden, einschließlich direkter, indirekter, zufälliger, Folgeschäden, Verlust von Geschäftsgewinnen oder sonderschäden, auch wenn die Microsoft Corporation oder ihre Lieferanten über die Möglichkeit solcher Schäden informiert wurden. Einige Staaten lassen den Ausschluss oder die Haftungsbeschränkung für Folge- oder Nebenschäden nicht zu, sodass die vorstehende Einschränkung möglicherweise nicht gilt.

Revisionen

  • V1.0 (9. Februar 2016): Empfehlung veröffentlicht.
  • V1.1 (10. Februar 2016): Empfehlung aktualisiert, um Downloadinformationen für Microsoft ASP.NET Web Frameworks sowie Tools und Microsoft ASP.NET und WebTools einzuschließen. Dies ist nur eine Informationsänderung.

Seite generiert 2016-02-19 14:36-08:00.