關於「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
將無法如預期般運作,因為它依賴此環境變數才能運作。相反地,我們建議您使用Utility Processes,它適用於許多需要獨立 Node.js 處理程序 (例如 Sqlite 伺服器處理程序或類似情境) 的用例。
您可以在我們的安全性檢查清單中找到更多關於我們為 Electron 應用程式建議的安全最佳實務的資訊。