Comunicado de Segurança da Microsoft 3214296

Vulnerabilidades na verificação de assinatura de token de extensões de modelo de identidade podem permitir elevação de privilégio

Publicado em: 10 de janeiro de 2017

Versão: 1.0

Resumo executivo

A Microsoft está lançando este comunicado de segurança para fornecer informações sobre uma vulnerabilidade na versão pública do Identity Model Extensions 5.1.0. Este comunicado também fornece orientação sobre o que os desenvolvedores podem fazer para ajudar a garantir que seus aplicativos sejam atualizados corretamente.

A Microsoft está ciente de uma vulnerabilidade de segurança na versão pública do Microsoft.IdentityModel.Tokens 5.1.0 em que tokens assinados com chaves simétricas podem estar vulneráveis a violação. Se um token assinado com uma chave simétrica for usado para verificar a identidade de um usuário e o aplicativo tomar decisões com base na identidade verificada desse usuário, o aplicativo poderá tomar decisões incorretas que resultem em elevação de privilégio.

Os desenvolvedores são aconselhados a atualizar todos os aplicativos para usar a versão do pacote 5.1.1 ou superior.

Fatores atenuantes

O algoritmo de assinatura de um token é especificado pelo provedor de identidade que um aplicativo está usando para autenticar um usuário. Somente algoritmos de assinatura simétrica são vulneráveis a esse problema, e nenhum provedor de identidade pública conhecido usa algoritmos de assinatura simétrica. Tokens assinados por provedores de identidade que usam algoritmos de assinatura assimétrica não são vulneráveis à violação de chaves.

ASP.NET modelos fornecidos para uso no Visual Studio não se vinculam à versão vulnerável deste pacote.

A Microsoft incentiva todos os desenvolvedores a atualizar seus pacotes, independentemente de serem usados para validar tokens assinados com um algoritmo de chave simétrica, para proteger contra o uso futuro dos componentes por eles mesmos ou por software de terceiros.

Softwares afetados

Um projeto do Microsoft .NET Core ou .NET Framework é afetado pela vulnerabilidade se ele usa o pacote Microsoft.IdentityModel.Tokens versão 5.1.0.

Pacote e versão afetados
Nome do pacote Versão do pacote
Microsoft.IdentityModel.Tokens 5.1.0

Perguntas frequentes sobre o Advisory

Como saber se sou afetado?
O .NET tem dois tipos diferentes de dependências: direta e transitiva. Se o seu projeto .NET Framework ou .NET Core tiver uma dependência direta ou transitiva de qualquer um dos pacotes afetados listados na seção "Software afetado", ele poderá ser afetado.

Dependências diretas

As dependências diretas ocorrem quando você adiciona especificamente um pacote ao seu projeto. Por exemplo, se você adicionar o pacote Microsoft.IdentityModel.Tokens ao seu projeto, você terá uma dependência direta de Microsoft.IdentityModel.Tokens.

As dependências diretas podem ser descobertas revisando o arquivo project.json ou .proj.

Dependências transitivas

As dependências transitivas ocorrem quando você adiciona um pacote ao seu projeto que, por sua vez, depende de outro pacote.

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

Como faço para corrigir meu aplicativo afetado?

Você precisará corrigir as dependências diretas e revisar e corrigir quaisquer dependências transitivas. A versão 5.1.1 do pacote vulnerável contém as correções necessárias para proteger seu aplicativo.

Corrigindo dependências de projeto do .NET Framework

  • Opção 1: Atualize seus pacotes de projeto do Visual Studio usando o NuGet, recompile seu aplicativo e implante

    1. Abra sua solução no Visual Studio.
    2. No Gerenciador de Soluções, clique com o botão direito do mouse no nó Referências e clique em Gerenciar Pacotes NuGet.
    3. Selecione a guia Atualizações . Uma lista de pacotes com atualizações é exibida no painel central.
    4. Selecione o pacote Microsoft.IdentityModel.Tokens e clique em Atualizar.
    5. Compile e implante seu aplicativo.

    Para obter mais informações sobre como gerenciar pacotes NuGet usando a caixa de diálogo NuGet, consulte Gerenciando pacotes NuGet usando a caixa de diálogo.

  • Opção 2: Atualize seus pacotes de projeto do Visual Studio usando a interface do usuário do Console do Gerenciador de Pacotes, recompile seu aplicativo e implante

    1. Abra sua solução no Visual Studio.
    2. Clique no menu Ferramentas, selecione Gerenciador de Pacotes de Biblioteca e clique em Console do Gerenciador de Pacotes.
    3. Na janela do gerenciador de pacotes, insira Update-Package Microsoft.IdentityModel.Tokens.
    4. Compile e implante seu aplicativo.

    Para obter mais informações sobre como usar o Console do Gerenciador de Pacotes, consulte Usando o Console do Gerenciador de Pacotes.

Corrigindo dependências do projeto .NET Core

Dependências diretas do projeto .NET Core

Para corrigir dependências diretas:

  1. Abra o arquivo project.json no editor. Procure a seção de dependências. A seguir é fornecida uma seção de exemplo:

         "dependencies": {
           "Microsoft.IdentityModel.Tokens": "5.1.0",
         }
    

    Neste exemplo, Microsoft.IdentityModel.Tokens é uma dependência direta. Atualize sua versão para 5.1.1 para baixar uma versão deste pacote que não seja afetada. Depois de atualizar a versão do pacote, salve o arquivo project.json. A seção dependências em nosso arquivo de project.json de exemplo agora apareceria da seguinte maneira:

         "dependencies": {
           "Microsoft.IdentityModel.Tokens": "5.1.1",
         }
    

    Se você estiver usando o Visual Studio e salvar seu arquivo de project.json atualizado, a nova versão será restaurada pelo Visual Studio. Você pode ver os resultados 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 altere para o diretório do projeto. Execute o comando dotnet restore para restaurar suas novas dependências.

  2. Depois de resolver todas as suas dependências diretas, você estará pronto para revisar suas dependências transitivas.

Dependências transitivas do projeto .NET Core

Examinando dependências transitivas

Há duas maneiras de exibir dependências transitivas: usar o Gerenciador de Soluções do Visual Studio ou revisar seu arquivo project.lock.json.

Usando o Gerenciador de Soluções do Visual Studio

Se você quiser usar o Gerenciador de Soluções, abra seu projeto no Visual Studio e pressione Ctrl+; para ativar a pesquisa no Gerenciador de Soluções. Procure o nome do pacote Microsoft.IdentityModel.Tokens. Se os resultados forem encontrados e a versão for 5.1.0, seu projeto terá uma dependência transitiva de Microsoft.IdentityModel.Tokens.

Corrigindo dependências transitivas do projeto .NET Core

Se você não encontrou Microsoft.IdentityModel.Tokens, nenhuma de suas dependências, por sua vez, depende do pacote vulnerável ou você já corrigiu o problema atualizando as dependências diretas.

Se sua revisão de dependência transitiva mostrou que você usa o pacote vulnerável, então você deve adicionar uma dependência direta a uma versão atualizada de cada pacote vulnerável ao seu arquivo project.json para substituir a dependência transitiva. Abra o arquivo project.json e localize a seção dependências. Por exemplo:


    "dependencies": {
      "VulnerablePackage": "1.0.0-*"
    }

Os resultados da pesquisa de pacote transitivo mostram que um pacote que seu aplicativo usa depende de Microsoft.IdentityModel.Tokens versão 5.1.0. Para corrigir este exemplo, você deve adicionar uma dependência direta adicionando-a ao arquivo project.json. Você pode fazer isso adicionando uma nova linha à seção de dependências que se refere à versão fixa. Edite o arquivo project.json da seguinte maneira:


     "dependencies": {
       "Microsoft.IdentityModel.Tokens": "5.1.1",
       "VulnerablePackage": "1.0.0-*"
     }

Depois de adicionar dependências diretas aos pacotes fixos, salve seu projeto. Arquivo JSON.

Se você estiver usando o 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 altere para o diretório do projeto. Execute o comando dotnet restore para restaurar suas novas dependências.

Talvez você queira verificar se há dependências transitivas novamente para garantir que você tenha corrigido todas elas.

Recriando seu aplicativo

Por fim, recrie seu aplicativo, teste-o como faria normalmente e reimplante-o usando seu mecanismo de implantação favorito.

Outras Informações

Programa de Proteção Ativa da Microsoft (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 de cada lançamento mensal da atualização de segurança. Os provedores de software de segurança podem usar essas informações de vulnerabilidade 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 intrusão baseados em rede ou sistemas de prevenção de intrusão baseados em host. Para determinar se as proteções ativas estão disponíveis a partir de provedores de software de segurança, visite os sites de proteções ativas fornecidos por parceiros do programa, listados em Parceiros do Microsoft Active Protections Program (MAPP).

Feedback

Suporte

Aviso de isenção de responsabilidade

As informações fornecidas neste comunicado são fornecidas "no estado em que se encontram", sem garantia de qualquer tipo. A Microsoft se isenta de todas as garantias, expressas ou implícitas, incluindo as garantias de comercialização e adequação a uma finalidade específica. Em nenhuma circunstância a Microsoft Corporation ou seus fornecedores serão responsáveis por quaisquer danos, incluindo danos diretos, indiretos, incidentais, consequenciais, perda de lucros comerciais ou danos especiais, mesmo que a Microsoft Corporation ou seus fornecedores tenham sido avisados da possibilidade de tais danos. Alguns estados não permitem a exclusão ou limitação de responsabilidade por danos consequenciais ou incidentais, portanto, a limitação acima pode não se aplicar.

Revisões

  • V1.0 (10 de janeiro de 2017): Comunicado publicado.

Página gerada em 04/01/2017 15:30-08:00.