Condividi tramite


Microsoft Security Advisory 3137909

Le vulnerabilità nei modelli di ASP.NET potrebbero consentire la manomissione

Pubblicato: 9 febbraio 2016 | Aggiornamento: 10 febbraio 2016

Versione: 1.1

Schema riepilogativo

Microsoft sta rilasciando questo avviso di sicurezza per fornire informazioni su una vulnerabilità nelle versioni pubbliche di Visual Studio 2013, Visual Studio 2015, ASP.NET MVC5 e ASP.NET MVC6. Questo avviso fornisce inoltre indicazioni sulle operazioni che gli sviluppatori possono eseguire per garantire che i controlli e i componenti compilati non siano soggetti alla vulnerabilità.

Microsoft è a conoscenza di una vulnerabilità di sicurezza nelle versioni pubbliche di Visual Studio 2013 e Visual Studio 2015 che possono essere usate in uno scenario di attacco di richiesta intersito (CSRF) contro le applicazioni Web create usando i modelli di progetto di ASP.NET interessati. I modelli di progetto Microsoft ASP.NET MVC5 e ASP.NET MVC6 vengono usati dagli sviluppatori di software come modelli di base per le nuove applicazioni Web.

Fattori di mitigazione

  • L'autenticazione a due fattori (2FA) non è abilitata per impostazione predefinita nelle applicazioni generate. Se uno sviluppatore non ha abilitato 2FA in base al numero di telefono di un utente, non vi sarà alcun impatto sulla sicurezza se il numero di telefono viene rimosso.

Domande frequenti sugli avvisi

In che modo un utente malintenzionato potrebbe sfruttare la vulnerabilità?
Un utente malintenzionato potrebbe usare la richiesta intersito falsa (CSRF) per inviare una richiesta a un'applicazione Web generata con i modelli vulnerabili e quindi rimuovere il numero di telefono di un utente autenticato dal database di identità ASP.NET. Il risultato della vulnerabilità sfruttata rimuove qualsiasi meccanismo di autenticazione a due fattori (2FA) che si basa su un numero di telefono. La password dell'utente non è interessata.

Cosa fa l'aggiornamento?
L'aggiornamento corregge i modelli di progetto di Visual Studio 2015 ASP.NET per MVC5 e MVC6.

Gli aggiornamenti del modello influiscono solo sulle nuove applicazioni. Per questo motivo, Microsoft consiglia vivamente agli sviluppatori che hanno creato applicazioni Web che usano questi modelli di intraprendere azioni immediate, elencate nella sezione Azioni suggerite, di valutare le applicazioni Web per l'esposizione alla vulnerabilità e quindi di usare le soluzioni alternative in tale sezione per apportare modifiche al codice per aggiornare le applicazioni per proteggerle dai vulnerabili.

Se si esegue Visual Studio 2013, è necessario usare la procedura alternativa elencata nella sezione Azioni suggerite per aggiornare manualmente le applicazioni ogni volta che sono stati usati i modelli interessati.

Ricerca per categorie applicare l'aggiornamento?

  1. Avviare Visual Studio.
  2. Nel menu Strumenti scegliere Estensioni e Aggiornamenti.
  3. Espandere l'albero Aggiornamenti.
  4. In Product Aggiornamenti individuare le due voci seguenti:
    • Strumenti Microsoft ASP.NET e Web
    • Strumenti e framework Web di Microsoft ASP.NET
  5. Selezionare ogni aggiornamento e fare clic su Aggiorna.

Azioni suggerite

Le informazioni sulla soluzione alternativa seguenti illustrano in dettaglio le modifiche che è necessario apportare alle applicazioni esistenti create dai modelli di progetto ASP.NET.

Visual Studio 2015 MVC 5 e Visual Studio 2013 MVC 5
Per C#

  1. Dalla directory Controllers caricare ManageController.cs.

  2. Cercare Remove Telefono Number() (riga 199).

  3. Il codice del modello, senza alcuna personalizzazione, verrà visualizzato come segue:

     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. Aggiungere gli attributi [HttpPost] e [ValidateAntiForgeryToken] alla definizione della funzione, in modo che il codice venga visualizzato come segue:

     [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. Dalla cartella Views/Manage caricare il file Index.cshtml.

  6. <Cercare dt> Telefono Number:</dt> (Riga 40)

  7. Il codice del modello, senza alcuna personalizzazione, viene visualizzato come segue:

     <dt>Phone Number:</dt>
    
@(Modello. Telefono Number ?? "Nessuno") [ @if (Model.TelefonoNumber != null) { @Html.ActionLink("Change", "Add Telefono Number") @:  |  @Html.ActionLink("Remove", "Remove Telefono Number") } else { @Html.ActionLink("Add", "Add Telefono Number") } ]
```
  1. Modificare il codice di visualizzazione in modo che sia visualizzato nel modo seguente:

     <dt>Phone Number:</dt>
    
@(Modello. Telefono Number ?? @if "Nessuno") (Model.TelefonoNumber != null) {
using (Html.BeginForm("Remove Telefono Number", "Manage", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { @Html.AntiForgeryToken() } } else { }
```
  1. Ricompilare l'applicazione e quindi ridistribuirla.

Per Visual Basic

  1. Dalla directory Controllers caricare ManageController.cs.

  2. Cercare Remove Telefono Number() (riga 164).

  3. Il codice del modello, senza alcuna personalizzazione, viene visualizzato come segue:

         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. Aggiungere gli attributi HttpPost> e <ValidateAntiForgeryToken> alla definizione della funzione per renderli visualizzati nel modo seguente:<

         <httppost>
    
  1. Dalla cartella Views/Manage caricare il file Index.vbhtml.

  2. <Cercare dt> Telefono Number:</dt> (riga 37)

  3. Il codice del modello, senza alcuna personalizzazione, viene visualizzato come segue:

                 <dt>Phone Number:</dt>
    
@(If(Model.TelefonoNumber, "None")) [ @If (Model.TelefonoNumero
Nothing) Then @Html.ActionLink("Change", "Add Telefono Number") @:  |  @Html.ActionLink("Remove", "Remove Telefono Number") Else @Html.ActionLink("Add", "Add Telefono Number") End If ]
```
  1. Modificare il codice di visualizzazione in modo che sia visualizzato nel modo seguente:

                 <dt>Phone Number:</dt>
    
@(If(Model.TelefonoNumero, "Nessuno")) @If (Model.TelefonoNumero
Niente) Allora @
@ @Using Html.BeginForm("Remove Telefono Number", "Manage", FormMethod.Post, New With {.class = "form-horizontal", .role = "form"}) @Html.AntiForgeryToken @ End Using Else @ End If
```
  1. Ricompilare l'applicazione e quindi ridistribuirla.

Visual Studio 2015 MVC 6
Per C#

  1. Dalla directory Controllers caricare ManageController.cs.

  2. Cercare Remove Telefono Number() (riga 178).

  3. Il codice del modello, senza alcuna personalizzazione, viene visualizzato come segue:

     // 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. Rimuovere l'attributo [HttpGet] e quindi aggiungere gli attributi [HttpPost] e [ValidateAntiForgeryToken] alla definizione della funzione, in modo che il codice venga visualizzato come segue:

      [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. Dalla cartella Views/Manage caricare il file Index.cshtml.

  6. Sostituire completamente il file di visualizzazione in modo che venga visualizzato come segue:

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

@ViewData["StatusMessage"]

    <div>

Modificare le impostazioni dell'account


Password:
@if (Model.HasPassword) { } else { }
Account di accesso esterni:
@Model.Logins.Count [  Gestisci  ]
Numero di telefono:
Telefono i numeri possono essere usati come secondo fattore di verifica nell'autenticazione a due fattori. Per informazioni dettagliate sulla configurazione di questa applicazione ASP.NET per supportare l'autenticazione a due fattori tramite SMS, vedere questo articolo . @*@(Modello. Telefono Number ?? @if "Nessuno") (Model.TelefonoNumber != null) {
[]
} else { }* @
Two-Factor Authentication:
Non sono configurati provider di autenticazione a due fattori. Vedere questo articolo per configurare questa applicazione per supportare l'autenticazione a due fattori. @*@if (Model.TwoFactor) {
Abilitato []
} else {
[] Disabilitato
}* @
```
  1. Ricompilare l'applicazione e quindi ridistribuirla.

Per Visual Basic

  • ASP.Net Core (in precedenza ASP.NET 5) non supporta Visual Basic.

Azioni aggiuntive suggerite

  • Scaricare gli aggiornamenti dello strumento di Visual Studio direttamente all'indirizzo:

  • Proteggere il PC
    Continuiamo a incoraggiare i clienti a seguire le linee guida per proteggere il computer per abilitare un firewall, ottenere gli aggiornamenti software e installare il software antivirus. Per altre informazioni, vedere Microsoft Cassaforte ty & Security Center.

  • Mantenere aggiornato il software Microsoft
    Gli utenti che eseguono software Microsoft devono applicare gli aggiornamenti della sicurezza Microsoft più recenti per assicurarsi che i computer siano il più protetti possibile. Se non si è certi che il software sia aggiornato, visitare Microsoft Update, analizzare il computer per verificare la disponibilità degli aggiornamenti e installare eventuali aggiornamenti ad alta priorità offerti. Se l'aggiornamento automatico è abilitato e configurato per fornire aggiornamenti per i prodotti Microsoft, gli aggiornamenti vengono recapitati all'utente quando vengono rilasciati, ma è necessario verificare che siano installati.

Altre informazioni

Feedback

Supporto tecnico

  • I clienti del Stati Uniti e del Canada possono ricevere supporto tecnico dal supporto tecnico. Per altre informazioni, vedere Guida e supporto tecnico Microsoft.
  • I clienti internazionali possono ricevere supporto dalle filiali Microsoft locali. Per altre informazioni, vedere Supporto internazionale.
  • Microsoft TechNet Security fornisce informazioni aggiuntive sulla sicurezza nei prodotti Microsoft.

Dichiarazione di non responsabilità

Le informazioni fornite in questo avviso vengono fornite "così com'è" senza garanzia di alcun tipo. Microsoft dichiara tutte le garanzie, espresse o implicite, incluse le garanzie di commerciabilità e idoneità per uno scopo specifico. In nessun caso, Microsoft Corporation o i suoi fornitori saranno responsabili di qualsiasi danno, incluso diretto, indiretto, accidentale, consequenziale, perdita di profitti aziendali o danni speciali, anche se Microsoft Corporation o i suoi fornitori sono stati informati della possibilità di tali danni. Alcuni stati non consentono l'esclusione o la limitazione della responsabilità per danni consequenziali o accidentali, pertanto la limitazione precedente potrebbe non essere applicata.

Revisioni

  • V1.0 (9 febbraio 2016): Avviso pubblicato.
  • V1.1 (10 febbraio 2016): avviso aggiornato per includere le informazioni di download per Microsoft ASP.NET Web Framework e Strumenti e Microsoft ASP.NET e Strumenti Web. Si tratta solo di una modifica informativa.

Pagina generata 2016-02-19 14:36-08:00.