跳至主要內容

關於「runAsNode」CVE 的聲明

·4 分鐘閱讀

今天稍早,Electron 團隊收到警報,得知最近針對幾個著名的 Electron 應用程式提交了數個公開 CVE。這些 CVE 與 Electron 的兩個熔斷器相關 - runAsNodeenableNodeCliInspectArguments - 並不正確地聲稱,如果沒有主動停用這些元件,遠端攻擊者可以透過這些元件執行任意程式碼。

我們不認為這些 CVE 是出於善意提交的。首先,該聲明不正確 - 此設定不會啟用遠端程式碼執行。其次,這些 CVE 中點名的公司雖然有漏洞賞金計畫,但並未收到通知。最後,雖然我們認為停用相關元件可以增強應用程式安全性,但我們不認為這些 CVE 已以正確的嚴重性提交。「嚴重」是保留給最高危險等級的問題,但這裡的情況當然不是這樣。

任何人都可以要求 CVE。雖然這對軟體產業的整體健康有益,但「收集 CVE」來提升單一安全研究人員的聲譽並無助益。

也就是說,我們理解單單存在一個具有可怕的嚴重等級的 CVE 可能會導致最終使用者感到困惑,因此作為一個專案,我們想為處理這個問題提供指導和協助。

這可能會如何影響我?

在審查 CVE 後,Electron 團隊認為這些 CVE 並不嚴重。

攻擊者需要已經能夠在機器上執行任意命令,無論是透過實際存取硬體或透過實現完整的遠端程式碼執行。這一點必須重複:所描述的漏洞要求攻擊者必須已經可以存取被攻擊的系統

例如,Chrome 在其威脅模型中不考慮實體本地攻擊

我們認為這些攻擊超出 Chrome 的威脅模型,因為 Chrome(或任何應用程式)無法防禦已成功以您的身分登入您的裝置,或可以使用您的作業系統使用者帳戶權限執行軟體的惡意使用者。這樣的攻擊者可以修改可執行檔和 DLL、變更環境變數 (例如 PATH)、變更設定檔、讀取您的使用者帳戶擁有的任何資料、透過電子郵件將其寄給自己,等等。這樣的攻擊者可以完全控制您的裝置,而 Chrome 無法採取任何措施來提供嚴重的防禦保證。這個問題並非 Chrome 特有 - 所有應用程式都必須信任實體本地使用者。

CVE 中描述的漏洞允許攻擊者接著將受影響的應用程式用作具有繼承 TCC 權限的通用 Node.js 處理程序。因此,舉例來說,如果應用程式已被授予存取通訊錄的權限,攻擊者可以將該應用程式作為 Node.js 執行,並執行將繼承該通訊錄存取權限的任意程式碼。這通常被稱為「利用現有工具」攻擊。攻擊者通常會使用 PowerShell、Bash 或類似的工具來執行任意程式碼。

我是否受到影響?

預設情況下,所有發佈的 Electron 版本都啟用了 runAsNodeenableNodeCliInspectArguments 功能。如果您沒有依照Electron 熔斷器文件中的說明關閉這些功能,您的應用程式同樣容易被用作「利用現有工具」攻擊。我們再次強調,攻擊者必須已經能夠在受害者的機器上執行程式碼和程式。

緩解措施

緩解此問題最簡單的方法是在您的 Electron 應用程式中停用 runAsNode 熔斷器。runAsNode 熔斷器會切換是否遵從 ELECTRON_RUN_AS_NODE 環境變數。請參閱Electron 熔斷器文件,以取得如何切換這些熔斷器的相關資訊。

請注意,如果停用此熔斷器,主要處理程序中的 process.fork 將無法如預期運作,因為它取決於此環境變數才能運作。相反地,我們建議您使用工具處理程序,這適用於許多需要獨立 Node.js 處理程序的使用案例(例如 Sqlite 伺服器處理程序或類似情況)。

您可以在我們的安全檢查清單中找到更多關於我們為 Electron 應用程式建議的最佳安全實務資訊。