安裝 2018 年 7 月的 .NET Framework 安全性與品質整合更新後,「存取被拒」錯誤及 COM 啟用的應用程式失敗

套用到
.NET

簡介

依賴 .NET Framework 初始化 COM 元件且權限受限的應用程式,安裝 2018 年 7 月的安全與品質整合更新後,可能會無法正常啟動或執行.NET Framework。

Microsoft .NET Framework 執行時使用程序令牌來判斷程序是否在提升的上下文中執行。 若未具備所需的流程檢查權限,這些系統呼叫可能會失敗。 這會導致「存取被拒絕」錯誤。

症狀

安裝任一 2018 年 7 月 .NET Framework 安全性更新之後,COM 元件因為出現「拒絕存取」、「類別未登錄」或「發生內部失敗,原因不明」錯誤而無法載入。 最常見的失敗簽章如下:

Exception type: System.UnauthorizedAccessException

Message: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

SharePoint

  • 當使用者瀏覽 SharePoint 網站時,可能會看到以下 HTTP 403 訊息:「網站拒絕顯示此網頁」HTTP 403。
  • SharePoint ULS 日誌將包含以下訊息:

w3wp.exe (0x1894)         0x0B94  SharePoint Foundation  General 0000       High                UnauthorizedAccessException for the request. 403 Forbidden will be returned. Error=An error occurred creating the configuration section handler for system.serviceModel/extensions: Could not load file or assembly <AssemblySignature>  or one of its dependencies. Access is denied. (C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Config\machine.config line 180)  

 w3wp.exe (0x1894)         0x0B94  SharePoint Foundation  General b6p2      VerboseEx                Sending HTTP response 403:403 FORBIDDEN.    

w3wp.exe (0x1894)         0x0B94  SharePoint Foundation  General 8nca       Verbose                Application error when access /, Error=Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))  

  • 當爬取人員內容來源時,請求可能會失敗,並在 SharePoint ULS 日誌中記錄以下條目:

mssearch.exe (0x118C) 0x203C SharePoint Server Search Crawler:Gatherer Plugin cd11 Warning The start address sps3s://<URLtoSite> cannot be crawled.  Context: Application 'Search_Service_Application', Catalog 'Portal_Content'  Details:  Class not registered   (0x80040154)

當錯誤發生時,SharePoint 爬取日誌中會記錄類似以下訊息:

        sps3s://<URLtoSite> 
爬取此類內容所需的元件並未註冊於此應用伺服器。 欲了解更多資訊,請參閱活動記錄。 (SearchID = XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)

BizTalk Server 管理主控台

  • BizTalk Server 管理主控台無法正確啟動,並回傳以下錯誤:

An internal failure occurred for unknown reasons. (WinMgmt)

Program Location:

   at System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)

   at System.Management.ManagementObject.Get()

   at Microsoft.BizTalk.SnapIn.Framework.WmiProvider.SelectInstance

IIS 搭配經典 ASP

  • 一個呼叫 CreateObject for .NET COM 物件的 Hosted Classic ASP 可能會產生類似以下錯誤訊息:

    ActiveX component can't create object

使用模擬的 .NET 應用程式

  • 一個在模擬上下文中建立 .NET COM 應用程式實例的 .NET 應用程式,可能會產生類似以下錯誤訊息:

    0x80040154 (REGDB_E_CLASSNOTREG)

解決方式

要解決這些問題,請套用適用於你作業系統及 .NET Framework 的 2018 年 8 月安全與品質整合更新,或僅安全更新。 欲了解更多資訊,請參考 CVE-2018-8356 |.NET Framework 安全功能繞過漏洞

因應措施

要解決這個問題,可以嘗試以下任一方法。

根據受影響的應用程式及其程式碼,以下的解決方法可能無效。

  • 如果你對程序啟動有進階知識,請使用 PROCESS_QUERY_INFORMATION 權限執行程序。

  • IIS Hosted Classic 在呼叫 CreateObject for .NET COM 物件時,可能會收到「ActiveX 元件無法建立物件」的錯誤:

    • 如果您的網站使用匿名認證:

      • 將網站匿名認證憑證改為使用「應用程式池身份」。
    • 如果您的網站使用基本認證或 Windows 驗證:

      • 以應用程式池身份登入一次,然後建立 .NET COM 元件的實例。
      • 之後,其他網站使用者就能在不失敗的情況下啟用 .NET COM 元件。
    • 或者,如果你使用 Windows 認證,並且是從執行 ASP 應用程式的 Windows 伺服器主控台存取網站:

      • 建立 .NET COM 元件的實例也能解決其他網站使用者的錯誤。
  • .NET 應用程式若在模擬上下文中建立 .NET COM 應用程式實例,可能會產生「0x80040154 (REGDB_E_CLASSNOTREG) 」錯誤訊息:

    • 在模擬上下文呼叫前建立 .NET COM 元件的實例。

      • 後來冒充的建立實例呼叫會如預期般運作。
    • 在冒充使用者的情境中執行 .NET 應用程式。

    • 建立 .NET COM 物件時,避免使用模擬。

  • 如果電腦的 UAC 被停用,請重新啟用。

  • 如果程序無法載入 Diasymreader.dll,請執行以下指令來執行組裝:

    ngen install <the failing assembly>

    欲了解更多關於 ngen 的資訊,請參見 Ngen.exe (原生影像產生器)

警告:以下的變通方法可能會使電腦或網路更容易受到惡意使用者或惡意軟體(如病毒)的攻擊。 我們不建議採用這些變通方法。 不過,我們提供這些資訊是為了讓你能自行決定是否實施這些變通方法。 使用這些變通方法請自行承擔風險。

  • 將「NETWORK SERVICE」加入本地管理員群組。

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

適用於

2018 年 7 月 .NET Framework 安全匯報,適用於所有適用且支援的 Windows 版本的 .NET Framework 3.5、4.0、4.5.2、4.6.1、4.6.2、4.7、4.7.1 及 4.7.2 版本