Node.js因為OpenSSL安全問題推遲更新
之前 Node.js 基金會曾承諾將修復兩個危險漏洞,并更新所有長期維護和穩定的 Node.js 分支。上周補丁已經發布并預計在本周發布更新,但為了包含最新的 OpenSSL 版本,基金會決定推遲更新,這是因為 OpenSSL 中的漏洞也影響了 Node.js。
上述提到的漏洞分別為拒絕服務漏洞(CVE-2015-8027)和內存越界訪問漏洞(CVE-2015-6764)。
拒絕服務漏洞影響了從 v0.12.x 至 v5.x 的所有 Node.js 版本。將其標記為危險漏洞是因為外部惡意攻擊者可以通過此漏洞關閉運行在指定系統的 Node.js 服務。在一定的條件下,HTTP SOCKET 可能無法獲取到與之相關的解析器,但一個流水線請求可能會在沒有解析器的情況下觸發暫停或者恢復操作,這將會拋出 uncaughtException。對外提供 HTTP 服務的被影響用戶應該盡快升級到已修復版本,具體為:Node.js 0.12.x 應升級至 Node.js 0.12.9 (LTS);Node.js 4.x 包括 LTS Argon 應升級至 Node.js 4.2.3 Argon (LTS);Node.js 5.x 應升級至 Node.js 5.1.1 (Stable)。
訪問越界漏洞被發現于 V8 引擎的JSON.stringify ()
實現中,json-stringifier.h
的函數BasicJsonStringifier::SerializeJSArray
未正確加載數組元素,遠程攻擊者通過構造的 JS 代碼,利用此漏洞可造成拒絕服務(越界內存訪問)。。這個問題被 Google Chrome 歸類為非常嚴重的漏洞并在本周 Chrome 穩定版的升級中被修復。該漏洞對于 Node.js 用戶來說風險較低,因為只有第三方的特定 JavaScript 代碼在應用中被執行才會觸發。只有對外提供服務且可能執行不信任的 JavaScript 代碼的用戶會有風險,但所有用戶都應進行升級,具體為:Node.js 4.x 包括 LTS Argon 應升級至 Node.js 4.2.3 Argon (LTS);Node.js 5.x 應升級至 Node.js 5.1.1 (Stable)。
OpenSSL 中的漏洞也會影響 Node.js。盡管 Node.js 0.10.x 沒有被上述問題影響,但由于它依賴于 OpenSSL v1.0.1,而 OpenSSL v1.0.1 和 1.0.2(CVE-2015-3194) 可能在證書檢查過程中被提供了使用 RSA PSS 算法生成的存在缺陷的 ASN.1 簽名而導致崩潰,攻擊者可以利用該缺陷使用客戶端授權進行拒絕服務攻擊 Node.js 服務器,所以還是需要升級。Node.js 4.x LTS 5.x 同樣受到了 OpenSSL 1.0.2 中 Montgomery 平方過程中的錯誤的影響,針對 RSA 和 DSA 進行攻擊是有可能的,盡管非常困難。
Node.js 基金會擁有最流行的 JavaScript 服務器平臺的管轄權。而 OpenSSL 則完全是一個獨立的項目,由自己的團隊維護。Heatbleed 事件已經表明,OpenSSL 被廣泛用于各種應用,所以更新 OpenSSL 通常會引起各種連鎖反映,這就是為什么 OpenSSL 步伐緩慢,Node.js 基金會不得不等待,推遲更新。如果基金會不等待按照計劃發布了更新,幾天后再同修復的 OpenSSL 發布新的版本,這將造成更多混亂,例如一些開發者可能錯過第二次更新的提示,或者將意識不到過期的 OpenSSL 的影響。
許多開發人員甚至都不知道他們應用中的所有組件,他們不知道調用了哪些 libraries,更別說這些被調用的 libraries 可能依賴了其他 libraries,這導致了當項目中出現了有漏洞的代碼的時候很難通知他們。開源代碼是普遍緊密聯系著的,任何依賴關系樹中的代碼出現問題都可能有著深遠而廣泛的影響。