Come faccio a creare un’istanza corretta degli oggetti COM a 32 bit nell’ASP classico dopo l’installazione di Windows Update KB4340558?

In Windows Server 2012 R2, dopo aver installato l’aggiornamento KB4340558 (cronologia degli aggiornamenti) / KB4338424 (aggiornamenti installati) non è più ansible creare un’istanza di .NET .DLL (interoperabilità) nel classico ASP in modalità a 32 bit utilizzando server.createobject . Riceviamo l’errore 0x800A01AD “Il componente ActiveX non può creare l’object”

Quando disinstalliamo l’aggiornamento, l’errore scompare. Nonostante i miei migliori sforzi, non sono riuscito a trovare una soluzione alternativa alla disinstallazione. Preferiremmo reinstallare l’aggiornamento e apportare le modifiche necessarie a Windows Server e / o alle DLL per consentire la corretta istanziazione degli oggetti COM. Non ci sono indizi nei log di sistema, nessun indizio nel database CVE e nessun indizio negli errori che l’ASP sta generando. Per favore aiuto!

Siamo stati interessati anche da più clienti.

Ho escluso la firma di nomi sicuri non validi dei nostri assembly, dal momento che anche gli .NET Assembly dal Framework stesso erano interessati da tale errore di accesso negato.

Finalmente sono riuscito a risolvere il problema tramite la configurazione. Apparentemente l’id quadro di autenticazione del sito Web deve ora corrispondere all’id quadro del pool di app. O IUSR non ha più abbastanza autorizzazioni.

inserisci la descrizione dell'immagine qui

EDIT: 19.07.2018

Avvertimento! Questo cambiamento ha anche un effetto collaterale:

L’evento asp-classic “Session_OnEnd” non è stato più chiamato e quindi le risorse non potrebbero più essere liberate. Ma c’è una soluzione anche per questo!

L’ASP-Config-Property “system.webServer / asp / runOnEndAnonymously” deve essere “false”, quindi l’evento si triggers nuovamente.

inserisci la descrizione dell'immagine qui

MODIFICA 2: 23.07.2018

Come ha sottolineato Dijkgraaf , Microsoft ora considera questo “nuovo comportamento” un bug. Quindi penso che la mia “soluzione” dovrebbe ora essere considerata una soluzione alternativa fino a quando una nuova patch verrà in soccorso.

Gestiamo il nostro pool di applicazioni con un’identity framework specifica, per consentire una condivisione di rete e l’accesso al database. Anch’io pensavo di essere rimasti bloccati dopo aver letto la risposta di @ keydon sopra.

Tuttavia, ci sono tre posizioni che dobbiamo configurare l’id quadro:

  • Il pool di applicazioni: dovrebbe utilizzare l’id quadro specifica
  • Il sito web “Connetti come” – dovrebbe utilizzare “Id quadro del pool di applicazioni”
  • L’opzione Autenticazione anonima, sotto la funzione Autenticazione, dovrebbe utilizzare “Id quadro del pool di applicazioni”

Quest’ultima era la cosa che ci mancava – anni passati a considerare solo i primi due significava che abbiamo letto male l’ottimo consiglio di cui sopra.

Microsoft è a conoscenza del problema e il KB pertinente è “Accesso negato” e le applicazioni con triggerszione COM non riescono dopo l’installazione degli aggiornamenti di sicurezza e di rollup luglio 2018 per .NET Framework

Ciò ha avuto un impatto su BizTalk, SharePoint, IIS con le classiche applicazioni ASP e .NET che utilizzano la rappresentazione.

Soluzioni alternative per Classic ASP sono le seguenti

IIS Hosted Classic che chiama CreateObject per gli oggetti COM .NET può ricevere un errore “Imansible creare il componente ActiveX”:

  • Se il proprio sito Web utilizza l’autenticazione anonima: modificare le credenziali di autenticazione anonima del sito Web per utilizzare l’id quadro del pool di applicazioni.
  • Se il sito utilizza l’autenticazione di base o l’autenticazione di Windows: accedere all’applicazione una volta come id quadro del pool di applicazioni, quindi creare un’istanza del componente COM .NET. Successivamente gli altri utenti del sito saranno in grado di triggersre il componente COM .NET senza l’errore.
  • In alternativa, se si utilizza l’autenticazione di Windows e si accede al sito Web dalla console di Windows Server su cui è in esecuzione l’applicazione ASP: La creazione di un’istanza del componente COM .NET risolve anche l’errore per altri utenti del sito.

Supportiamo un sito ASP classico in esecuzione in Autenticazione anonima IIS. L’applicazione crea un’istanza di un object DLL .NET esposto come COM visibile.

Dopo aver applicato gli aggiornamenti di sicurezza recenti di Windows e riavviato il sistema operativo, la nostra applicazione si è bloccata con il seguente errore:

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

Nel nostro caso, quest’ultimo consiglio ha risolto i nostri problemi.

IIS> Autenticazione> Autenticazione anonima – Modifica> “Id quadro del pool di applicazioni”

screenshot1

Questo è solo per confermare la soluzione fornita da keydon, combinata con quella fornita da TimP. E dai loro grazie !!

Nel nostro caso abbiamo modificato le seguenti 3 parti (e un ulteriore 4 per le nuove autorizzazioni):

  1. Proprietà di autenticazione del server Web: imposta Autenticazione anonima con “Identity framework del pool di applicazioni” anziché “Utente specifico”.

  2. Proprietà “Identity” del pool di applicazioni: impostare su “ApplicationPoolIdentity” anziché su “LocalSystem”.

  3. Sito Web “Connetti come” per il percorso fisico: impostare su “Utente dell’applicazione (autenticazione pass-through)” anziché su “Utente specifico”.

  4. Aggiungere le autorizzazioni per ” Nome utente id quadro pool di applicazioni ” nella cartella condivisa in cui si trovano i file dell’applicazione Web. Dai un’occhiata a https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities#securing-resources

Grazie!! (Mi dispiace di non poter votare le tue soluzioni perché sono di partenza e non ho alcuna reputazione)