伺服器端 JavaScript 平台 Node.js 21.6.2、20.11.1、18.19.1 的修復版本現已發布,修復了 8 個漏洞,其中 4 個漏洞被評為高風險等級:
- CVE-2024-21892 - 非特權使用者可能會繼承工作進程執行時間提升的權限,從而進行程式碼替換。該漏洞是由於異常實作中的錯誤引起的,該錯誤允許具有提升權限的進程處理非特權使用者設定的環境變數。這個例外應該只針對 CAP_NET_BIND_SERVICE 功能授予,但由於錯誤,它也應用於其他一些功能。
- CVE-2024-22019 - 當內建 HTTP 伺服器處理特製的分塊請求時,透過耗盡可用資源(CPU 負載和頻寬消耗)來拒絕服務,導致在單一連線中讀取無限數量的位元組。
- CVE-2024-21896 – 檔案路徑中的基底目錄超出範圍。在使用 Buffer 類別傳遞路徑的情況下,該漏洞可讓您使用 path.resolve() 繞過檔案路徑規範化。為了驗證後獲得這樣的路徑,需要呼叫Buffer.from()方法,但應用程式可能會呼叫Buffer.prototype.utf8Write,這會導致在執行path.resolve()階段內容被取代並創造一個漏洞。
- CVE-2024-22017 - setuid() 呼叫並未放棄所有權限。特別是,如果在呼叫 setuid() 之前初始化了 libuv 中使用的 io_uring 操作,則 setuid() 不會影響它們。
- CVE-2023-46809 是 privateDecrypt() API 中的漏洞,允許利用 Marvin 攻擊根據操作時間來解密 RSA。
- CVE-2024-21891 - 使用自訂檔案路徑規範化處理程序時可能會繞過存取模型。
- CVE-2024-21890 - “--allow-fs-read”和“--allow-fs-write”參數中的遮罩處理不正確。例如,「--allow-fs-read=/home/node/.ssh/*.pub」將導致存取「.ssh/」的全部內容,而不僅僅是帶有「.pub」副檔名的文件,因為「*」遮罩被視為路徑的最後一個元素。
- CVE-2024-22025 在解碼透過 fetch() 呼叫獲得的 Brotli 格式的壓縮資料時,由於資源消耗而導致拒絕服務。
此外,值得一提的是 libuv 1.48.0 的發布,這是一個用於 Node.js 的連接復用和非同步 I/O 處理的函式庫。除了 Node.js,該程式庫也被用於 BIND 9 和 Knot DNS DNS 伺服器、H2O HTTP 伺服器以及 Luvit Lua 框架。 虛擬機 MoarVM、Julia 語言和 uvloop Python 框架。新版本修復了一個影響使用 libuv 的專案的漏洞 (CVE-2024-24806),該漏洞允許伺服器端請求偽造 (SSRF) 攻擊存取內部 API。此漏洞的原因是 uv_getaddrinfo() 函數在透過 getaddrinfo() 函數解析網域名稱之前,會將主機名稱截斷為 256 個字符,這可能導致解析出的主機名稱錯誤。 IP 地址 並繞過安全檢查。例如,像 MySpace 這樣的服務會建立類似「username.example.com」這樣的子域名,攻擊者可以透過指定過長的使用者名稱來發動攻擊。
Node.js 中使用的 undici 5.28.3 HTTP 用戶端也發布了更新,修復了由於重定向請求時無法清除 Proxy-Authorization HTTP 標頭而導致的漏洞 (CVE-2024-24758)。
來源: opennet.ru
