Comunicado de Segurança da Microsoft 3214296

Vulnerabilidades na verificação de assinatura de token do Identity Model Extensions podem permitir a elevação de privilégios

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 aviso também fornece orientações sobre o que os desenvolvedores podem fazer para 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 ser vulneráveis a adulteraçã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 resultarão em elevação de privilégios.

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

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 usando algoritmos de assinatura assimétrica não são vulneráveis à adulteração de chaves.

Os modelos ASP.NET fornecidos para uso no Visual Studio não são vinculados à versão vulnerável desse pacote.

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

Software afetado

Um projeto 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 do comunicado

Como eu sei se sou afetado?
O .NET tem dois tipos diferentes de dependências: direta e transitiva. Se seu projeto .NET Framework ou .NET Core tem 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.IdentityModel.Tokens ao projeto, criará uma dependência direta a Microsoft.IdentityModel.Tokens.

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

Dependências transitivas

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

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 5.1.1 do pacote vulnerável contém as correções necessárias para proteger o aplicativo.

Como corrigir dependências de projeto do .NET Framework

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

    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, confira 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 o aplicativo e implemente-o

    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, digite 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, confira Usando o Console do Gerenciador de Pacotes.

    Como corrigir dependências de projeto do .NET Core

    Dependências diretas de projeto do .NET Core

    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.IdentityModel.Tokens": "5.1.0",
            }
      

      Nesse exemplo, Microsoft.IdentityModel.Tokens é uma dependência direta. Atualize sua versão para 5.1.1 para baixar uma versão desse pacote que não é afetada. Depois de atualizar a versão do pacote, salve o arquivo project.json. A seção dependencies no arquivo de exemplo project.json agora teria esta aparência:

            "dependencies": {
              "Microsoft.IdentityModel.Tokens": "5.1.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.

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

    Dependências transitivas de projeto do .NET Core

    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 o nome do pacote Microsoft.IdentityModel.Tokens. Se forem encontrados resultados e a versão for 5.1.0, seu projeto terá uma dependência transitiva ao Microsoft.IdentityModel.Tokens.

    Como corrigir dependências transitivas de projeto do .NET Core

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

    Se o exame de dependências transitivas mostrou que você usa o pacote vulnerável, 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": {
          "VulnerablePackage": "1.0.0-*"
        }
    

    Os resultados da pesquisa de pacote transitivo mostram que um pacote usado pelo aplicativo depende da versão 5.1.0 de Microsoft.IdentityModel.Tokens. 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. 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 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.

    Como recompilar seu aplicativo

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

    Outras informações

    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 com base em rede ou sistemas de prevenção de invasões com base 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 (10 de janeiro de 2017): Comunicado publicado.

Página gerada em 2017-01-04 11:31-08:00.