關於「runAsNode」CVE 的聲明
今天稍早,Electron 團隊接獲通知,得知針對幾個知名 Electron 應用程式提出的多個公開 CVE。這些 CVE 與 Electron 的兩個熔絲(runAsNode
和 enableNodeCliInspectArguments
)有關,且錯誤地宣稱,如果沒有主動停用這些元件,遠端攻擊者便能透過這些元件執行任意程式碼。
我們認為這些 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 版本都啟用了 runAsNode
和 enableNodeCliInspectArguments
功能。如果您尚未按照Electron 熔絲文件中的描述將其關閉,您的應用程式同樣容易被用作「借力使力」攻擊。同樣地,我們需要強調攻擊者必須*已經*能夠在受害者的機器上執行程式碼和程式。
緩解
緩解此問題的最簡單方法是在您的 Electron 應用程式中停用 runAsNode
熔絲。runAsNode
熔絲會切換是否尊重 ELECTRON_RUN_AS_NODE
環境變數。請參閱Electron 熔絲文件,以了解如何切換這些熔絲。
請注意,如果停用了此熔絲,則主要程序中的 process.fork
將無法如預期般運作,因為它取決於此環境變數才能運作。相反地,我們建議您使用公用程式程序,這適用於許多您需要獨立 Node.js 程序的情況(例如 Sqlite 伺服器程序或類似情況)。
您可以在我們的安全性檢查清單中找到更多關於我們建議用於 Electron 應用程式的安全性最佳做法的資訊。