Como faço para instanciar corretamente objects COM de 32 bits no ASP clássico depois de instalar o Windows Update KB4340558?

No Windows Server 2012 R2, após a instalação da atualização KB4340558 (histórico de atualizações) / KB4338424 (atualizações instaladas), não é mais possível instanciar .NET .DLLs (interoperabilidade) no ASP clássico no modo de 32 bits usando server.createobject . Recebemos o erro 0x800A01AD “Componente ActiveX não pode criar object”

Quando desinstala a atualização, o erro desaparece. Apesar dos meus melhores esforços, não consegui encontrar uma solução alternativa para a desinstalação. Preferiríamos reinstalar a atualização e fazer quaisquer alterações necessárias ao Windows Server e / ou às DLLs para permitir que os objects COM sejam instanciados corretamente. Não há pistas nos logs do sistema, nenhuma pista no database CVE e nenhuma pista nos erros que o ASP está gerando. Por favor ajude!

Também fomos afetados por vários clientes.

Eu descartei a assinatura inválida de nomes fortes de nossos assemblies, uma vez que os .NET Assemblies do próprio Framework foram afetados por esse erro de access negado também.

Finalmente consegui resolver o problema por configuração. Aparentemente, a identidade de autenticação do site agora deve corresponder à identidade do pool de aplicativos. Ou IUSR não tem permissions suficientes.

insira a descrição da imagem aqui

EDIT: 19.07.2018

Atenção! Essa alteração também tem um efeito colateral:

O evento asp-classic “Session_OnEnd” não era mais chamado e, portanto, os resources não podiam mais ser liberados. Mas há uma correção para isso também!

O ASP-Config-Property “system.webServer / asp / runOnEndAnonymously” tem que ser “false”, então o evento é acionado novamente.

insira a descrição da imagem aqui

EDITARIA 2: 23.07.2018

Como Dijkgraaf apontou, a Microsoft agora considera esse “novo comportamento” um bug. Então eu acho que minha “solução” deve agora ser considerada uma solução até que um novo patch venha para resgatar.

Executamos nosso pool de aplicativos sob uma identidade específica, para permitir um compartilhamento de rede e access ao database. Eu também pensei que estávamos presos depois de ler a resposta do @keydon acima.

No entanto, existem três lugares que devemos configurar a identidade:

  • O pool de aplicativos – deve usar a identidade específica
  • O site “Conectar como” – deve usar a “identidade do pool de aplicativos”
  • A opção Autenticação Anônima, no recurso Autenticação, deve usar “Identidade do pool de aplicativos”

Essa última foi a coisa que estávamos perdendo – anos considerando apenas os dois primeiros significam que interpretamos mal o grande conselho acima.

A Microsoft está ciente do problema e a KB relevante é erros de “Acesso Negado” e os aplicativos com a ativação COM falham após a instalação das atualizações de julho de 2018 do Security and Quality Rollup para o .NET Framework

Isso afetou o BizTalk, SharePoint, IIS com aplicativos ASP e .NET clássicos que usam a representação.

Soluções alternativas para ASP clássico são as seguintes

IIS Hospedado ASP clássico chamando CreateObject para objects COM .NET pode receber um erro “componente ActiveX não pode criar object”:

  • Se o seu site usa Autenticação Anônima: Altere as credenciais de Autenticação Anônima do Site para usar a “Identidade do pool de aplicativos”.
  • Se o seu site usa Autenticação Básica ou Autenticação do Windows: Faça o login no aplicativo uma vez como a identidade do pool de aplicativos e crie uma instância do componente .NET COM. Depois, outros usuários do site poderão ativar o componente .NET COM sem a falha.
  • Como alternativa, se você estiver usando a Autenticação do Windows e acessando o site a partir do console do Windows Server em que o aplicativo ASP é executado: A criação de uma instância do componente .NET COM também resolve o erro de outros usuários do site.

Oferecemos suporte a um site ASP clássico em execução no IIS Anonymous Authentication. O aplicativo instancia um object DLL .NET exposto como COM visível.

Depois de aplicar a segurança recente do Windows Updates e reiniciar o sistema operacional, nosso aplicativo falhou com o seguinte erro:

 Microsoft VBScript runtime error '800a01ad' ActiveX component can't create object: 'NameOfObjectInDLL' 

No nosso caso, este último conselho corrigiu nossos problemas.

IIS> Autenticação> Autenticação Anônima – Editar> “Identidade do pool de aplicativos”

captura de canvas1

Isso é apenas para confirmar a solução fornecida pelo keydon, combinada com a fornecida pelo TimP. E agradeça !!

Em nosso caso, alteramos as três partes a seguir (e uma quarta adicional para novas permissions):

  1. Propriedades de autenticação do servidor Web: defina Autenticação anônima com “Identidade do pool de aplicativos” em vez de “Usuário específico”.

  2. Propriedade “Identity” do pool de aplicativos: defina como “ApplicationPoolIdentity” em vez de “LocalSystem”.

  3. Web Site “Conectar como” para caminho físico: defina como “Usuário do aplicativo (autenticação de passagem)” em vez de “Usuário específico”.

  4. Adicione permissions para ” Nome de usuário da Identidade do Pool de Aplicativos ” na pasta compartilhada onde estão os arquivos do aplicativo da web. Dê uma olhada em https://docs.microsoft.com/pt-br/iis/manage/configuring-security/application-pool-identities#securing-resources

Obrigado!! (Me desculpe, eu não posso votar em suas soluções porque eu sou iniciante e não tenho nenhuma reputação)