GLSA-202405-29:Node.js:多個弱點

critical Nessus Plugin ID 195166

語系:

說明

遠端主機受到 GLSA-202405-29 中所述的弱點影響 (Node.js:多個弱點)

- 3.2.2、 4.0.1 和 5.0.5 之前的 y18n 套件容易受到原型污染。 (CVE-2020-7774)

- 在 c-ares 程式庫中發現一個缺陷,其中 DNS (網域名稱伺服器) 傳回的主機名稱缺少輸入驗證檢查,可能會造成輸出錯誤的主機名稱,進而可能導致網域劫持。此弱點對於機密性和完整性以及系統可用性威脅最大。(CVE-2021-3672)

- 若透過「unknownProtocol」建立過多連線嘗試,Node.js 10.24.0、12.21.0、14.16.0 和 15.10.0 之前版本容易遭受拒絕服務攻擊。這會導致檔案描述符號洩漏。如果在系統上設定了檔案描述符號限制,伺服器將無法接受新連線,也無法防止處理程序開啟檔案等。如果未設定任何檔案描述符號限制,則會導致過度使用記憶體,並造成系統記憶體不足。
(CVE-2021-22883)

- 允許清單中包含 localhost6 時,Node.js 10.24.0、12.21.0、14.16.0、15.10.0 之前版本很容易受到 DNS 重新繫結攻擊。如果 /etc/hosts 中不存在「localhost6」,則它只是可透過 DNS (即網路) 解析的一般網域。如果攻擊者控制受害者的 DNS 伺服器或可以偽造其回應,則可使用「localhost6」網域繞過 DNS 重新繫結保護。只要攻擊者使用 localhost6 網域,就仍可套用 CVE-2018-7160 中所述的攻擊。(CVE-2021-22884)

- 使用 uv__idna_toascii() 函式將字串轉換為 ASCII 時,Node.js 16.4.1 之前版本、14.17.2 版、12.22.2 版容易受到 libuv 中的超出邊界讀取弱點影響。讀取並增加指標 p 時,未檢查其是否超出 pe,而後者有一個指向緩衝區結尾的指標。這可導致資訊洩漏或損毀。此函式可透過 uv_getaddrinfo() 觸發。(CVE-2021-22918)

- 16.6.0 、14.17.4 和 12.22.4 版之前的 Node.js 容易受到釋放後使用攻擊,攻擊者可能會利用記憶體損毀來變更處理程序的行為。(CVE-2021-22930)

- 16.6.0、14.17.4 和 12.22.4 版之前的 Node.js 容易受到遠端程式碼執行、XSS、應用程式損毀攻擊,這是因為 Node.js dns 程式庫中缺少對網域名稱伺服器所傳回的主機名稱輸入的驗證,進而導致使用該程式庫的應用程式中存在錯誤的主機名稱輸出 (導致網域劫持) 和插入弱點。(CVE-2021-22931)

- 如果 Node.js https API 使用不當,並且針對 rejectUnauthorized 參數傳入 undefined,則應用程式不會傳回任何錯誤,且會接受與具有過期憑證的伺服器的連線。(CVE-2021-22939)

- 16.6.1 、14.17.5 和 12.22.5 版之前的 Node.js 容易受到釋放後使用攻擊,攻擊者可能會利用記憶體損毀來變更處理程序的行為。(CVE-2021-22940)

- 剖析器接受冒號前的標頭名稱後帶有一個空格 (SP) 的要求。這可導致低於 2.1.4 版和 6.0.6 版的 llhttp 發生 HTTP 要求走私。(CVE-2021-22959)

- 在低於 2.1.4 版和 6.0.6 版的 llhttp 中,parse 函式在剖析區塊要求的內文時會忽略區塊延伸模組。在某些情況下,這會導致 HTTP 要求走私 (HRS)。(CVE-2021-22960)

- 4.4.16、5.0.8、6.1.7 版之前的 npm 套件 tar (亦稱 node-tar) 存在任意檔案建立/覆寫和任意程式碼執行弱點。「node-tar」的目的是保證應用程式不會擷取任何會被符號連結修改位置的檔案。這部分是透過確保擷取的目錄不是符號連結來實現的。此外,為了防止不必要的「stat」呼叫以判斷指定路徑是否為目錄,在建立目錄時,應用程式會快取路徑。
在 posix 系統上,封存項目中的符號連結和目錄名稱使用反斜線作為路徑分隔符號,當擷取含有目錄和同名符號連結的 tar 檔案時,此邏輯是不充分的。快取檢查邏輯同時使用 `\` 和 `/` 字元作為路徑分隔符號,不過 `\` 在 posix 系統上是有效的檔案名稱字元。藉由先建立目錄,然後以符號連結取代該目錄,就可以繞過「node-tar」針對目錄的符號連結檢查,實際上,這允許未受信任的 tar 檔案以符號連結指向任意位置,然後將任意檔案解壓縮至該位置,從而允許建立和覆寫任意檔案。此外,不區分大小寫的檔案系統也會發生類似的混淆。如果 tar 封存包含 `FOO` 的目錄,後跟名為 `foo` 的符號連結,則在不區分大小寫的檔案系統上建立符號連結時,即會從檔案系統移除目錄,但不會從內部目錄移除快取,因為該建立進程不會被視為快取命中。`FOO` 目錄中的後續檔案項目會被放置在符號連結的目標中,並認為該目錄已經建立。這些問題已在 4.4.16、5.0.8、6.1.7 版中得到解決。node-tar 的 v3 分支已過時,且未收到這些問題的修補程式。如果您仍在使用 v3 版本,我們建議您更新至較新的 node-tar 版本。
如果無法執行此操作,請參閱 GHSA-9r2w-394v-53qc 中的因應措施。(CVE-2021-37701)

- 4.4.18、5.0.10、6.1.9 版之前的 npm 套件 tar (亦稱 node-tar) 存在任意檔案建立/覆寫和任意程式碼執行弱點。「node-tar」的目的是保證應用程式不會擷取任何會被符號連結修改位置的檔案。這部分是透過確保擷取的目錄不是符號連結來實現的。此外,為了防止不必要的「stat」呼叫以判斷指定路徑是否為目錄,在建立目錄時,應用程式會快取路徑。
當擷取的 tar 檔案同時包含目錄以及符號連結 (其名稱包含標準化為相同值的 unicode 值) 時,此邏輯是不充分的。此外,在 Windows 系統上,長路徑部分會解析為其 8.3 對應短路徑的相同檔案系統實體。因此,特製的 tar 封存可包含具有一種形式路徑的目錄,隨後是具有解析為相同檔案系統實體的不同字串的符號連結,之後是使用第一種形式的檔案。藉由先建立目錄,然後以符號連結 (具有不同的明顯名稱,且解析為檔案系統中的相同條目) 取代該目錄,就可以繞過「node-tar」針對目錄的符號連結檢查,實際上,這允許未受信任的 tar 檔案以符號連結指向任意位置,然後將任意檔案解壓縮至該位置,從而允許建立和覆寫任意檔案。這些問題已在 4.4.18、5.0.10、6.1.9 版中得到解決。
node-tar 的 v3 分支已過時,且未收到這些問題的修補程式。如果您仍在使用 v3 版本,我們建議您更新至較新的 node-tar 版本。如果無法執行此操作,請參閱 GHSA-qq89-hq3f-393p 中的因應措施。(CVE-2021-37712)

- 「@npmcli/arborist」(用於計算相依性樹狀結構並管理 npm 命令行介面之「node_modules」資料夾階層的程式庫) 旨在保證符合套件相依性協定,且一律會執行套件內容擷取存入預期的資料夾。這部分是透過針對具有特定名稱的相依性,解析在「package.json」資訊清單中定義的相依性指定名稱,以及解決相衝突相依性的巢狀資料夾來完成的。當多個相依性僅在名稱的大小寫上有所不同時,Arborist 的內部資料結構會將其視為可共存於「node_modules」階層的相同層級中的獨立項目。不過,在區分大小寫的檔案系統 (例如 macOS 和 Windows) 上,情況並非如此。結合 symlink 相依性 (如「file:/some/path」),這可讓攻擊者造成可將任意內容寫入檔案系統上任何位置的狀況。例如,「pwn-a」套件可在「package.json」檔案中定義相依性,如「foo: file:/some/path」。另一個套件「pwn-b」可定義相依性,例如「FOO: file:foo.tgz」。在區分大小寫的檔案系統上,如果安裝了「pwn-a」,之後又安裝了「pwn-b」,則「foo.tgz」的內容會寫入「/some/path」,以及任何現有的內容的「/some/path」會遭到移除。在不區分大小寫的檔案系統上使用 npm v7.20.6 或更舊版本的使用者可能會受到影響。此問題已在 @npmcli/arborist 2.8.2 中修補,其隨附於 npm v7.20.7 和更新版本。(CVE-2021-39134)

- 「@npmcli/arborist」(用於計算相依性樹狀結構並管理 npm 命令行介面之 node_modules 資料夾階層的程式庫) 旨在保證符合套件相依性協定,且一律會執行套件內容擷取存入預期的資料夾。具體方法是將套件內容解壓縮至專案的「node_modules」資料夾中。如果 root 專案的「node_modules」資料夾或其任何相依性以某種方式以符號連結取代,則可允許 Arboist 將套件相依性寫入檔案系統上的任意位置。請注意,套件成品內容中包含的符號連結會被篩選,因此必須採用其他建立「node_modules」符號連結的方法。 1.「preinstall」指令碼可以用符號連結取代「node_modules」。(可透過使用 「--ignore-scripts」來預防。) 2. 攻擊者可提供 git 存放庫的目標,指示他們在 root 中執行「npm install --ignore-scripts」。此動作可能會成功,因為「npm install --ignore-scripts」通常無法在專案目錄之外進行變更,因此可能會被視為安全。此問題已在 @npmcli/arborist 2.8.2 中修補,其隨附於 npm v7.20.7 和更新版本。如需包括因應措施在內的詳細資訊,請參閱參照的 GHSA-gmw6-94gg-2rc2。(CVE-2021-39135)

- 接受任意主體別名 (SAN) 類型 (除非特別定義 PKI 以使用特定 SAN 類型) 可導致繞過限制名稱的中繼體。Node.js < 12.22.9、< 14.18.3、< 16.13.2 和 < 17.3.1 接受通常定義為不使用 PKI 的 URI SAN 類型。
此外,當通訊協定允許 URI SAN 時,Node.js 未與 URI 正確相符。具有此修正的 Node.js 版本會在針對主機名稱檢查憑證時停用 URI SAN 類型。此行為可透過 --security-revert 命令列選項還原。(CVE-2021-44531)

- Node.js < 12.22.9、< 14.18.3、< 16.13.2 和 < 17.3.1 會將 SAN (主體別名) 轉換為字串格式。驗證連線時,它會使用此字串根據主機名稱檢查對等憑證。在憑證鏈中使用名稱限制時,字串格式容易受到一個插入弱點影響,進而允許繞過這些名稱限制。具有此修正的 Node.js 版本會溢出包含問題字元的 SAN,以防止插入。此行為可透過 --security-revert 命令列選項還原。(CVE-2021-44532)

- Node.js < 12.22.9、< 14.18.3、< 16.13.2 和 < 17.3.1 未正確處理多值相對辨別名稱。例如,攻擊者可建構包含單值相對辨別名稱的憑證主體,該名稱會被解譯為多值相對辨別名稱,以便插入允許繞過憑證主體驗證的通用名稱。受影響的 Node.js 版本不會接受多值相對辨別名稱,因此本身不會受到此類攻擊影響。但是,憑證主體使用節點不明確表示法的第三方程式碼可能會受到影響。(CVE-2021-44533)

- BN_mod_sqrt() 函式專用於計算模組化平方根,其中包含一個可導致其針對非質數模數永遠執行迴圈的錯誤。在內部剖析包含壓縮形式的橢圓曲線公開金鑰或具有以壓縮形式編碼之基點的顯式橢圓曲線參數時,會使用此函式。透過建構具有無效顯式曲線參數的憑證,可能會觸發無限迴圈。由於憑證剖析發生在驗證憑證簽章之前,因此任何剖析外部提供之憑證的處理程序都可能遭受拒絕服務攻擊。也可以在剖析建構的私密金鑰時造成無限迴圈,因為這些金鑰中可能包含顯式橢圓曲線參數。因此,易受攻擊的情況包括:使用伺服器憑證的 TLS 伺服器 - 使用用戶端憑證的 TLS 伺服器 - 從客戶處取得憑證或私密金鑰的主機供應商 - 剖析來自使用者憑證要求的認證機構 - 剖析 ASN.1 橢圓曲線參數的任何其他應用程式,以及使用 BN_mod_sqrt() 的任何其他應用程式 (其中攻擊者可控制容易受到此 DoS 問題影響的參數值)。在 OpenSSL 1.0.2 版本中,最初剖析憑證期間並未剖析公開金鑰,進而導致觸發無限迴圈變得略微困難。不過,任何需要憑證公開金鑰的作業都會觸發無限迴圈。特別是,攻擊者可在驗證憑證簽章期間使用自我簽署憑證觸發迴圈。OpenSSL 1.0.2、 1.1.1 和 3.0 會受到此問題影響。此問題已在 2022 年 3 月 15 日發布的 1.1.1n 和 3.0.2 版本中得到解決。已在 OpenSSL 3.0.2 中修復 (受影響的是 3.0.0、3.0.1)。已在 OpenSSL 1.1.1n 中修復 (受影響的是 1.1.1-1.1.1m)。已在 OpenSSL 1.0.2zd 中修正 (受影響的是 1.0.2-1.0.2zc)。(CVE-2022-0778)

- 在 X.509 憑證驗證中可觸發緩衝區滿溢,特別是在名稱限制檢查中。請注意,此問題會在憑證鏈簽章驗證之後發生,且需要 CA 簽署惡意憑證,或是即使無法建構受信任的簽發者路徑,應用程式仍需繼續進行憑證驗證。攻擊者可建構惡意電子郵件地址,造成堆疊中溢出四個受攻擊者控制的位元組。此緩衝區溢位問題可能會導致當機 (造成拒絕服務攻擊),或觸發遠端程式碼執行攻擊。許多平台已實作堆疊溢位保護措施,可減輕遠端程式碼執行的風險。可根據任何指定平台/編譯器的堆疊配置進一步降低風險。 CVE-2022-3602 的預先公告將此問題描述為「重大」。根據上述一些減輕風險的因素進行進一步分析後,已將此問題降級為「高風險」。仍建議使用者盡快升級至新版本。在 TLS 用戶端中,藉由連線至惡意伺服器即可觸發此問題。
在 TLS 伺服器中,如果伺服器要求用戶端驗證且惡意用戶端連線,則可觸發此問題。已在 OpenSSL 3.0.7 中修正 (受影響的是 3.0.0、3.0.1、3.0.2、3.0.3、3.0.4、3.0.5、3.0.6)。(CVE-2022-3602)

- 在 X.509 憑證驗證中可觸發緩衝區滿溢,特別是在名稱限制檢查中。請注意,此問題會在憑證鏈簽章驗證之後發生,且需要 CA 簽署惡意憑證,或是即使無法建構受信任的簽發者路徑,應用程式仍需繼續進行憑證驗證。攻擊者可在憑證中建構惡意電子郵件地址,造成堆疊中溢出任意數量包含「.」的位元組 (十進位 46)。此緩衝區溢位問題可能會導致當機 (造成拒絕服務攻擊)。在 TLS 用戶端中,藉由連線至惡意伺服器即可觸發此問題。在 TLS 伺服器中,如果伺服器要求用戶端驗證且惡意用戶端連線,則可觸發此問題。(CVE-2022-3786)

- 由於 console.table() 函式的格式化邏輯,在傳送具有至少一個屬性的純物件 (可能是 __proto__) 的同時,將使用者控制的輸入傳送至屬性參數是不安全的。原型污染的控制權非常有限,因為它只允許將空字串指派給物件原型的數值金鑰。Node.js >= 12.22.9、>= 14.18.3、>= 16.13.2 和 >= 17.3.1 使用這些屬性獲派的物件空值原型。(CVE-2022-21824)

- 14.20.0、16.20.0、18.5.0 之前的 Node.js 版本中有一個 OS 命令注入弱點,這是因為 IsAllowedHost 檢查不充分所致,因為 IsIPAddress 在提出 DBS 要求之前未正確檢查 IP 位址是否無效,進而允許重新系結攻擊。(CVE-2022-32212)

- Node.js http 模組中的 llhttp 剖析器 (小於 v14.20.1、v16.17.1 和 v18.9.1) 未正確剖析和驗證 Transfer-Encoding 標頭,進而可能導致 HTTP 要求走私 (HRS)。(CVE-2022-32213)

- Node.js http 模組中的 llhttp 剖析器 (小於 v14.20.1、v16.17.1 和 v18.9.1) 未嚴格使用 CRLF 序列來分隔 HTTP 要求。這可導致 HTTP 要求走私 (HRS)。
(CVE-2022-32214)

- Node.js http 模組中的 llhttp 剖析器 (小於 v14.20.1、v16.17.1 和 v18.9.1) 未正確處理多行傳輸編碼標頭。這可導致 HTTP 要求走私 (HRS)。
(CVE-2022-32215)

- 低於 18.40.0 的 Linux 18.x 版本上的 Node.js 存在密碼編譯弱點,其允許使用 openssl.cnf 的預設路徑,在某些情況下,非管理員使用者可以存取此預設路徑,而不是 /etc/ssl,在未升級至 OpenSSL 3 的版本中也會發生此情況。(CVE-2022-32222)

- 在 Node.js 18 中,WebCrypto keygen 弱點存在弱式隨機性,這是因為 src/crypto/crypto_keygen.cc 的 SecretKeyGenTraits::DoKeyGen() 中的 EntropySource() 變更所致。此隨機性帶來兩個問題:1) 它不會檢查傳回值,而是假設 EntropySource() 總是成功,但可能 (且有時會) 失敗。2) EntropySource() 傳回的隨機資料在密碼編譯方面可能不強,因此不適合作為金鑰產製原料。(CVE-2022-35255)

- Node v18.7.0 的 http 模組中的 llhttp 剖析器未正確處理非以 CLRF 結尾的標頭欄位,這可能會導致 HTTP 要求走私攻擊。(CVE-2022-35256)

- Undici 是一個專為 Node.js.「=< [email protected]」使用者從零編寫的 HTTP/1.1 用戶端,
使用未清理的輸入執行作為要求標頭 (具體而言是在 `content-type` 標頭內) 時,這些使用者易受到標頭上的 _CRLF Injection_ 攻擊。範例:``` import { request } from 'undici' const unsanitizedContentTypeInput = 'application/json\r\n\r\nGET /foo2 HTTP/1.1' await request('http://localhost:3000, { method: 'GET', headers: { 'content-type': unsanitizedContentTypeInput }, }) ``` 上述程式碼會在單一「要求」API 呼叫中執行兩個要求:1) `http://localhost:3000/` 2) `http://localhost:3000/foo2` 此問題已在 Undici v5.8.1 中修補。使用使用者輸入傳送內容類型標頭時,清理輸入作為因應措施。(CVE-2022-35948)

- undici 是一個專為 Node.js.「undici」從零編寫的 HTTP/1.1 用戶端,當應用程式將用戶輸入傳入「undici.request」的「path/pathname」選項時,Node.js.「undici」存在 SSRF (伺服器端要求偽造) 弱點。如果使用者指定 URL,如 `http://127.0.0.1` or `//127.0.0.1` ```js const undici = require(undici) undici.request({origin: http://example.com, pathname: //127.0.0.1}) ```它不會將要求處理為 `http://example.org//127.0.0.1` (或當使用 `http://example.org/http://127.0.0.1` 時為 `http://127.0.0.1),它實際上會將要求處理為 `http://127.0.0.1/`,並將其傳送至 `http://127.0.0.1`。如果開發人員將使用者輸入傳遞至「undici.request」的「path」參數,可能會導致 _SSRF_,因為他們會假設主機名稱無法變更,但實際上因為指定的路徑參數與基本 URL。此問題已在「[email protected]」中修正。最佳的因應措施是先驗證使用者輸入,再將其傳遞至「undici.request」呼叫。(CVE-2022-35949)

- 低於 14.21.1、16.18.1、18.12.1、19.0.1 的 Node.js 版本中存在 OS 命令插入弱點,這是因為 IsAllowedHost 檢查不充分所致,IsIPAddress 在提出 DBS 要求之前未正確檢查 IP 位址是否無效,因而攻擊者可以輕易略過 IsAllowedHost 檢查,執行重新繫結攻擊。https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32212 中針對此問題的修復不完整,所以提供了新的 CVE 來補充此修復。(CVE-2022-43548)

- process.mainModule.__proto__.require() 中使用的 __proto__ 可繞過原則機制,並要求 policy.json 定義之外的模組。此弱點會影響在下列所有有效版本系列中使用實驗性原則機制的所有使用者:v16、v18 和 v20。請注意,在此 CVE 發布時,此原則為 Node.js 的實驗性功能 (CVE-2023-30581)

- Node.js 20 存在權限提升弱點,此弱點允許載入任意 OpenSSL 引擎,因而可繞過和/或停用權限模型。
此攻擊的複雜度高。但是,使用相容的 OpenSSL 引擎呼叫時,攻擊者可利用 crypto.setEngine() API 繞過權限模型。例如,OpenSSL 引擎可藉由操控處理程序的堆疊記憶體,在主機處理程序的堆積記憶體中找到權限模型 Permission::enabled_。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。(CVE-2023-30586)

- 使用無效的公開金鑰建立使用 crypto.X509Certificate() API 的 x509 憑證時,會發生意外終止。如果攻擊者可強制中斷應用程式處理,則程式容易受到 DoS 攻擊,這是因為處理程序在從使用者程式碼存取所提供之憑證的公開金鑰資訊時會發生終止。使用者的目前內容會消失,進而造成 DoS 狀況。此弱點會影響所有有效的 Node.js v16、v18 和 v20 版本。(CVE-2023-30588)

- Node v20.2.0 http 模組中的 llhttp 剖析器未嚴格使用 CRLF 序列來分隔 HTTP 要求。這可導致 HTTP 要求走私 (HRS)。CR 字元 (不含 LF) 足以分隔 llhttp 剖析器中的 HTTP 標頭欄位。根據 RFC7230 第 3 節,只有 CRLF 序列應該分隔每個標頭欄位。此弱點會影響所有使用中的 Node.js 版本:v16、v18 和 v20 (CVE-2023-30589)

- 從 crypto.createDiffieHellman() 傳回的 generateKeys() API 函式只會產生缺失 (或過時) 的金鑰,也就是說,如果尚未設定任何金鑰,則只會產生私密金鑰。但是,在呼叫 setPrivateKey() 後,也需要此函式來計算相應的公開金鑰。不過,文件指出此 API 呼叫:產生私密和公開 Diffie-Hellman 金鑰值。記錄的行為與實際行為不同,因為 DiffieHellman 可作為應用程式層級安全性的基礎,所以此差異很容易在使用這些 API 的應用程式中造成安全性問題,最後造成廣泛影響。(CVE-2023-30590)

- 使用「Module._load()」可繞過原則機制,並針對特定模組要求 policy.json 定義之外的模組。此弱點會影響在下列所有有效版本系列中使用實驗性原則機制的所有使用者:16.x、18.x 和 20.x。請注意,在此 CVE 發布時,此原則為 Node.js 的實驗性功能。(CVE-2023-32002)

-「fs.mkdtemp()」和「fs.mkdtempSync()」可用於使用路徑遊走攻擊繞過權限模型檢查。產生此瑕疵的原因是,fs.mkdtemp() API 中缺少檢查,其影響是惡意執行者可建立任意目錄。此弱點會影響使用 Node.js 20 版中實驗性權限模型的所有使用者。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。(CVE-2023-32003)

- 在 Node.js 20 版本中發現一個弱點,特別是在實驗性權限模型中。此缺陷與驗證檔案權限時檔案系統 API 中錯誤處理緩衝區有關,可造成路徑遊走繞過問題。此弱點會影響使用 Node.js 20 版中實驗性權限模型的所有使用者。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。(CVE-2023-32004)

- 在 Node.js 20 版中發現一個弱點,當 --allow-fs-read 旗標與 non-* 引數一起使用時,此弱點會影響實驗權限模型的使用者。產生此弱點的原因是,權限模型不足,無法透過「fs.statfs」API 限制檔案統計資料。因此,惡意執行者可以從他們沒有明確讀取權限的檔案中擷取統計資料。此弱點會影響使用 Node.js 20 版中實驗性權限模型的所有使用者。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。(CVE-2023-32005)

- 使用「module.constructor.createRequire()」可繞過原則機制,並針對特定模組要求 policy.json 定義之外的模組。此弱點會影響在下列所有有效版本系列中使用實驗性原則機制的所有使用者:16.x、18.x 和 20.x。請注意,在此 CVE 發布時,此原則為 Node.js 的實驗性功能。(CVE-2023-32006)

- 使用過時的 API「process.binding()」可透過路徑遊走繞過權限模型。
此弱點會影響使用 Node.js 20.x 版中實驗性權限模型的所有使用者。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。
(CVE-2023-32558)

- 在所有使用中版本行的實驗性原則機制中,存在一個權限提升弱點:16.x、18.x 和 20.x。使用過時 API「process.binding()」可透過要求內部模組來繞過原則機制,並最終利用「process.binding('spawn_sync')」執行在「policy.json」檔案中定義的限制之外的任意程式碼。請注意,在此 CVE 發布時,此原則為 Node.js 的實驗性功能。(CVE-2023-32559)

- 在 Node.js 20 版中發現一個弱點,當 --allow-fs-read 旗標與 non-* 引數一起使用時,此弱點會影響實驗權限模型的使用者。產生此弱點的原因是,權限模型不足,無法透過 fs.watchFile API 限制檔案監控。因此,惡意執行者可以監控他們沒有明確讀取權限的檔案。此弱點會影響使用 Node.js 20 版中實驗性權限模型的所有使用者。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。感謝 Colin Ihrig 報告此弱點,同時感謝 Rafael Gonzaga 修正此弱點。(CVE-2023-30582)

- 在 Node.js 20 中使用具有 --allow-fs-read 旗標的檔案系統讀取限制時,fs.openAsBlob() 可繞過實驗性權限模型。產生此弱點的原因是 fs.openAsBlob() API 中缺少檢查。此弱點會影響使用 Node.js 20 版中實驗性權限模型的所有使用者。感謝 Colin Ihrig 報告此弱點,同時感謝 Rafael Gonzaga 修正此弱點。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。(CVE-2023-30583)

- 在 Node.js 20 版本中發現一個弱點,特別是在實驗性權限模型中。此缺陷與驗證檔案權限時未正確處理路徑遊走略過問題有關。
此弱點會影響使用 Node.js 20 版中實驗性權限模型的所有使用者。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。感謝 Axel Chong 報告此弱點,同時感謝 Rafael Gonzaga 修正此弱點。
(CVE-2023-30584)

- Node.js 20 版中有一個弱點,允許繞過使用內建檢查器模組 (node:inspector) 的 --experimental-permission 旗標設定的限制。攻擊者可利用 Worker 類別建立包含 kIsInternal Symbol 的內部背景工作,進而在 Worker 建構函式內附加檢查器時,在初始化新的 WorkerImpl 之前修改 isInternal 的值。
此弱點只會影響使用 Node.js 20 版中權限模型機制的 Node.js 使用者。請注意,在此 CVE 發布時,此權限模型為 Node.js 的實驗性功能。感謝 mattaustin 報告此弱點,同時感謝 Rafael Gonzaga 修正此弱點。(CVE-2023-30587)

請注意,Nessus 並未測試這些問題,而是僅依據應用程式自我報告的版本號碼作出判斷。

解決方案

所有 Node.js 20 使用者皆應升級至最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=net-libs/nodejs-20.5.1 所有 Node.js 18 使用者皆應升級至最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=net-libs/nodejs-18.17.1 所有 Node.js 16 使用者皆應升級至最新版本:

# emerge --sync # emerge --ask --oneshot --verbose >=net-libs/nodejs-16.20.2

另請參閱

https://security.gentoo.org/glsa/202405-29

https://bugs.gentoo.org/show_bug.cgi?id=772422

https://bugs.gentoo.org/show_bug.cgi?id=781704

https://bugs.gentoo.org/show_bug.cgi?id=800986

https://bugs.gentoo.org/show_bug.cgi?id=805053

https://bugs.gentoo.org/show_bug.cgi?id=807775

https://bugs.gentoo.org/show_bug.cgi?id=811273

https://bugs.gentoo.org/show_bug.cgi?id=817938

https://bugs.gentoo.org/show_bug.cgi?id=831037

https://bugs.gentoo.org/show_bug.cgi?id=835615

https://bugs.gentoo.org/show_bug.cgi?id=857111

https://bugs.gentoo.org/show_bug.cgi?id=865627

https://bugs.gentoo.org/show_bug.cgi?id=872692

https://bugs.gentoo.org/show_bug.cgi?id=879617

https://bugs.gentoo.org/show_bug.cgi?id=918086

https://bugs.gentoo.org/show_bug.cgi?id=918614

Plugin 詳細資訊

嚴重性: Critical

ID: 195166

檔案名稱: gentoo_GLSA-202405-29.nasl

版本: 1.1

類型: local

已發布: 2024/5/8

已更新: 2024/5/8

支援的感應器: Nessus

風險資訊

VPR

風險因素: High

分數: 7.3

CVSS v2

風險因素: High

基本分數: 7.5

時間分數: 5.9

媒介: CVSS2#AV:N/AC:L/Au:N/C:P/I:P/A:P

CVSS 評分資料來源: CVE-2021-22931

CVSS v3

風險因素: Critical

基本分數: 9.8

時間分數: 8.8

媒介: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

時間媒介: CVSS:3.0/E:P/RL:O/RC:C

CVSS 評分資料來源: CVE-2023-32002

弱點資訊

CPE: p-cpe:/a:gentoo:linux:nodejs, cpe:/o:gentoo:linux

必要的 KB 項目: Host/local_checks_enabled, Host/Gentoo/release, Host/Gentoo/qpkg-list

可被惡意程式利用: true

可輕鬆利用: Exploits are available

修補程式發佈日期: 2024/5/8

弱點發布日期: 2020/11/17

參考資訊

CVE: CVE-2020-7774, CVE-2021-22883, CVE-2021-22884, CVE-2021-22918, CVE-2021-22930, CVE-2021-22931, CVE-2021-22939, CVE-2021-22940, CVE-2021-22959, CVE-2021-22960, CVE-2021-3672, CVE-2021-37701, CVE-2021-37712, CVE-2021-39134, CVE-2021-39135, CVE-2021-44531, CVE-2021-44532, CVE-2021-44533, CVE-2022-0778, CVE-2022-21824, CVE-2022-32212, CVE-2022-32213, CVE-2022-32214, CVE-2022-32215, CVE-2022-32222, CVE-2022-35255, CVE-2022-35256, CVE-2022-35948, CVE-2022-35949, CVE-2022-3602, CVE-2022-3786, CVE-2022-43548, CVE-2023-30581, CVE-2023-30582, CVE-2023-30583, CVE-2023-30584, CVE-2023-30586, CVE-2023-30587, CVE-2023-30588, CVE-2023-30589, CVE-2023-30590, CVE-2023-32002, CVE-2023-32003, CVE-2023-32004, CVE-2023-32005, CVE-2023-32006, CVE-2023-32558, CVE-2023-32559