Comunicado de Segurança da Microsoft 3181759

Vulnerabilidades nos Componentes Core View do ASP.NET podem permitir a elevação de privilégio

Publicado em: 13 de setembro de 2016

Versão: 1.0

Sinopse

A Microsoft está lançando este comunicado de segurança para fornecer informações sobre uma vulnerabilidade nas versões públicas do ASP.NET Core MVC 1.0.0. Este aviso também fornece orientações sobre o que os desenvolvedores podem fazer para garantir que seus aplicativos sejam atualizados corretamente.

A Microsoft tem conhecimento de uma vulnerabilidade de segurança na versão pública do ASP.NET Core MVC 1.0.0 em que Componentes de Exibição podem receber informações incorretas, inclusive detalhes sobre o usuário autenticado atual. Se um Componente de Exibição depende do código vulnerável e toma decisões com base no usuário atual, o Componente de Exibição pode tomar decisões erradas que resultem em elevação de privilégio.

Fatores atenuantes

Um Componente de Exibição deve usar a propriedade User que é exposto pela classe ViewComponent para tomar decisões ou alterar a saída com base no conteúdo da propriedade User. Código de terceiros também pode incluir Componentes de Exibição que agem dessa maneira. A Microsoft recomenda que todos os desenvolvedores atualizem seus pacotes, independentemente de usarem Componentes de Exibição ou a propriedade User neles, para se proteger contra uso futuro dos componentes por si próprios ou por software de terceiros.

Um projeto Microsoft ASP.NET Core é afetado pela vulnerabilidade se ele usa qualquer uma das versões de pacotes afetadas da tabela a seguir.

Pacotes e versões afetados

Nome do pacote

Versão do pacote

Microsoft.AspNetCore.Mvc

1.0.0

Microsoft.AspNetCore.Mvc.Abstractions

1.0.0

Microsoft.AspNetCore.Mvc.ApiExplorer

1.0.0

Microsoft.AspNetCore.Mvc.Core

1.0.0

Microsoft.AspNetCore.Mvc.Cors

1.0.0

Microsoft.AspNetCore.Mvc.DataAnnotations

1.0.0

Microsoft.AspNetCore.Mvc.Formatters.Json

1.0.0

Microsoft.AspNetCore.Mvc.Formatters.Xml

1.0.0

Microsoft.AspNetCore.Mvc.Localization

1.0.0

Microsoft.AspNetCore.Mvc.Razor

1.0.0

Microsoft.AspNetCore.Mvc.Razor.Host

1.0.0

Microsoft.AspNetCore.Mvc.TagHelpers

1.0.0

Microsoft.AspNetCore.Mvc.ViewFeatures

1.0.0

Microsoft.AspNetCore.Mvc.WebApiCompatShim

1.0.0

Como eu sei se sou afetado? 
O ASP.NET Core tem dois tipos diferentes de dependências: direta e transitiva. Se seu projeto tem ou uma dependência direta ou transitiva em qualquer um dos pacotes afetados listados na seção “Software afetado”, ele pode ser afetado.

Dependências diretas

Dependências diretas ocorrem quando você adiciona especificamente um pacote a seu projeto. Por exemplo, se você adicionar o pacote Microsoft.AspNetCore.Mvc ao projeto, criará uma dependência direta com Microsoft.AspNetCore.Mvc.

As dependências diretas podem ser descobertas examinando o arquivo project.json.

Dependências transitivas

Dependências transitivas ocorrem quando você adiciona um pacote ao projeto que, por sua vez, depende de outro pacote. Por exemplo, se você adicionar o pacote Microsoft.AspNetCore.Authentication ao projeto, ele dependerá do pacote Microsoft.AspNetCore.Http (entre outros). Isso faz com que seu projeto tenha uma dependência direta com Microsoft.AspNetCore.Authentication e uma dependência transitiva no pacote Microsoft.AspNetCore.Http.

As dependências transitivas podem ser examinadas na janela do Gerenciador de Soluções do Microsoft Visual Studio, que também dá suporte à pesquisa, ou examinando o arquivo project.lock.json contido no diretório raiz do projeto. Esse arquivo contém a lista oficial de pacotes para seu projeto.

Como corrigir o aplicativo afetado?

Você precisará corrigir as dependências diretas e examinar e corrigir quaisquer dependências transitivas. A versão 1.0.1 de cada um dos pacotes vulneráveis contém as correções necessárias para proteger o aplicativo.

Corrigindo dependências diretas

Para corrigir dependências diretas:

  1. Abra o arquivo project.json em seu editor. Procure a seção dependencies. A seguir é fornecida uma seção de exemplo:
      "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.0", }
    

    Neste exemplo, há três dependências diretas: Microsoft.NetCore.App, Microsoft.AspNetCore.Server.Kestrel e Microsoft.AspNetCore.Mvc.

    Microsoft.NetCore.App é a plataforma para a qual o aplicativo é direcionado e pode ser ignorada. Os outros pacotes expõem sua versão à direita do nome do pacote. Neste exemplo, os pacotes que não são da plataforma são a versão 1.0.0.

  2. Examine as dependências diretas em relação à lista de pacotes vulneráveis na seção Softwares afetados deste comunicado.

    Para cada pacote vulneráveis em que há uma dependência direta, altere o número de versão no editor para 1.0.1. Depois de atualizar todas as versões de pacotes vulneráveis, salve o arquivo project.json.

    A seção dependencies no arquivo de exemplo project.json agora teria esta aparência:

      "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "Microsoft.AspNetCore.Mvc": "1.0.1", }
    

    Se você estiver usando o Visual Studio e salvar o arquivo project.json atualizado, a nova versão será restaurada pelo Visual Studio. Você pode ver o resultado da restauração abrindo a janela de saída (Ctrl+Alt+O) e alterando a lista suspensa Mostrar saída de para Gerenciador de Pacotes.

    Se você não estiver usando o Visual Studio, abra uma linha de comando e mude para o diretório do projeto. Execute o comando dotnet restore para restaurar suas novas dependências.

  3. Depois de lidar com todas as dependências diretas, você está pronto para examinar as dependências transitivas.

Examinando dependências transitivas

Há duas formas de exibir dependências transitivas: Use o Gerenciador de Soluções do Visual Studio ou examine o arquivo project.lock.json.

Usando o Gerenciador de Soluções do Visual Studio

Se você quiser usar o Gerenciador de Soluções, abra o projeto no Visual Studio e pressione Ctrl+; para ativar a pesquisa no Gerenciador de Soluções. Procure cada um dos nomes de pacotes que estão listados na seção Softwares afetados neste comunicado e anote quaisquer pacotes vulneráveis que você encontrar.

Por exemplo, se você pesquisar Microsoft.AspNetCore.Mvc em um projeto de exemplo que contém um pacote que tem uma dependência de Microsoft.AspNetCore.Mvc, serão exibidos os resultados da figura a seguir.

Mt764057.192BC2766CBE5378F7B3F253CE34043D(pt-BR,Security.10).png

Figura 1: Pesquisando no Visual Studio

 

Os resultados da pesquisa são mostrados como uma árvore. Nos resultados, você pode ver as referências identificadas. A primeira entrada sob o título Referências refere-se à estrutura de destino que o aplicativo está usando. Será .NETCoreApp, .NETStandard ou .NET Framework--vX.Y.Z (em que X.Y.Z é um número de versão real), dependendo de como você configurou o aplicativo. Na estrutura de destino, é mostrada a lista de pacotes dos quais você obteve diretamente uma dependência. Neste exemplo, o aplicativo tem uma dependência em VulnerablePackage. VulnerablePackage, por sua vez, tem nós folha que listam suas dependências e suas versões. Nesse caso, o pacote tem uma dependência de uma versão vulnerável do Microsoft.AspNetCore.Mvc e outros.

Examinando manualmente project.lock.json

Abra o arquivo project.lock.json em seu editor. Sugerimos usar um editor que compreenda JSON e que permita recolher e expandir nós para examinar esse arquivo. O Visual Studio e o Visual Studio Code fornecem essa funcionalidade.

Se você estiver usando Visual Studio, o arquivo project.lock.json estará "sob" o arquivo project.json. Clique no triângulo que aponta para a direita, ▷, à esquerda do arquivo project.json, para expandir a árvore de solução e expor o arquivo project.lock.json. A figura a seguir mostra um projeto com o arquivo project.json expandido para mostrar o arquivo project.lock.json.

Mt764057.10871F6DAB46208F3A20B4D79DC43612(pt-BR,Security.10).png

Figura 2: localização do arquivo project.lock.json

 

Pesquise nos arquivos project.lock.json os pacotes vulneráveis que estão listados na seção Softwares afetados deste comunicado. Para cada pacote, no nome do pacote, adicione uma / (barra) e adicione o número da versão. Por exemplo, Microsoft.AspNetCore.Mvc versão 1.0.0 é representado no arquivo project.lock.json como "Microsoft.AspNetCore.Mvc/1.0.0". Tome nota de cada nome de pacote que você achar que corresponde a uma entrada na tabela da seção Softwares Afetados deste comunicado.

Corrigindo dependências transitivas

Agora talvez você tenha uma lista de pacotes afetados. Se você ainda não encontrou pacotes transitórios, nenhuma de suas dependências depende de um pacote vulnerável ou você já resolveu o problema atualizando as dependências diretas.

Se o exame de dependências transitivas produziu uma lista de pacotes vulneráveis, você deve adicionar uma dependência direta para uma versão atualizada de cada pacote vulnerável ao arquivo project.json para substituir a dependência transitiva. Abra o arquivo project.json e localize a seção dependencies . Por exemplo:

  "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "VulnerablePackage": "1.0.0-*" }

Os resultados da pesquisa de pacotes transitivos mostram que VulnerablePackage depende do Microsoft.AspNet.Mvc versão 1.0.0. Para corrigir esse exemplo, você deve adicionar uma dependência direta, adicionando-a ao arquivo project.json. Você pode fazer isso adicionando uma nova linha à seção dependencies que se refere à versão corrigida. Por exemplo, para obter a versão corrigida de Microsoft.AspNet.Mvc, versão 1.0.1, edite o arquivo project.json da seguinte forma:

  "dependencies": { "Microsoft.NETCore.App": { "version": "1.0.0", "type": "platform" }, "Microsoft.AspNetCore.Mvc": "1.0.1", "Microsoft.AspNetCore.Server.Kestrel": "1.0.0", "VulnerablePackage": "1.0.0-*" }

Depois de adicionar dependências diretas aos pacotes corrigidos, salve o arquivo project.json.

Se você estiver usando Visual Studio, salvar o arquivo project.json atualizado armazena as novas versões no Visual Studio. Para ver os resultados da restauração, abra a janela de saída (Ctrl+Alt+O) e altere a lista suspensa Mostrar saída de para Gerenciador de Pacotes.

Se você não estiver usando o Visual Studio, abra uma linha de comando e mude para o diretório do projeto. Execute o comando dotnet restore para restaurar suas novas dependências.

Convém verificar se há dependências transitivas novamente para garantir que você corrigiu todas elas.

Recompilando o aplicativo

Finalmente, recompile o aplicativo, teste-o como faria normalmente e, depois, implante-o novamente usando seu mecanismo de implantação favorito.

  • Atualizar os modelos ASP.NET Core

    "Visualização 3 do.NET Core Tooling Preview para Visual Studio 2015" atualiza os modelos ASP.NET Core para usar os pacotes corrigidos.

    Para baixar essa visualização, consulte a seção "Ferramentas" da página Downloads do .NET.

Microsoft Active Protections Program (MAPP)

Para melhorar as proteções de segurança para os clientes, a Microsoft fornece informações sobre vulnerabilidades aos principais fornecedores de software de segurança antes do lançamento de cada atualização de segurança mensal. Assim, os fornecedores de software de segurança podem usar essas informações sobre vulnerabilidades para fornecer proteções atualizadas aos clientes por meio de seus softwares ou dispositivos de segurança, como antivírus, sistemas de detecção de invasões baseados em rede ou sistemas de prevenção de invasões baseados em host. Para determinar se os fornecedores de software de segurança estão disponibilizando proteções ativas, visite os sites de proteções ativas fornecidos pelos parceiros do programa, listados em Parceiros do Microsoft Active Protections Program (MAPP).

Comentários

Suporte

Aviso de isenção de responsabilidade

As informações oferecidas neste documento são fornecidas "como estão" sem garantia de nenhum tipo. A Microsoft se isenta de todas as garantias, expressas ou implícitas, inclusive as garantias de comercialização e adequação a um propósito específico. Em hipótese alguma a Microsoft Corporation ou seus fornecedores serão responsáveis por quaisquer danos, inclusive danos diretos, indiretos, incidentais, consequenciais, danos por lucros cessantes ou danos especiais, mesmo que a Microsoft Corporation ou seus fornecedores tenham sido alertados da possibilidade dos referidos danos. Como alguns estados não permitem a exclusão ou limitação de responsabilidade por danos consequenciais ou indiretos, a limitação acima pode não ser aplicável a você.

Revisões

  • V1.0 (13 de setembro de 2016): Comunicado publicado.

Página gerada em 03/09/2016 às 07:36-07:00.
Mostrar: