R 程式語言的主要實作中發現了一個嚴重漏洞 (CVE-2024-27322),該漏洞旨在解決資料的統計處理、分析和視覺化問題,導致在反序列化未經驗證的資料時執行程式碼。在處理用於在應用程式之間交換資料的 RDS(R 資料序列化)和 RDX 格式的特製檔案時,可以利用此漏洞。該問題已在 R 4.4.0 中修復。您可以在 Debian、Ubuntu、RHEL、SUSE/openSUSE、Fedora、Arch、FreeBSD 的頁面上追蹤發行版中軟體包更新的發布。
此漏洞由用於載入 RDS 和 RDX 格式檔案的 readRDS 函數的特定功能引起,該功能允許將序列化的 R 物件傳輸到另一個系統進行處理。序列化允許捕獲狀態並在程式之間交換資料集。 RDS 格式允許儲存單一物件的狀態,而 RDX 格式與 RDB 檔案結合使用則允許傳輸多個物件的資訊。此問題與 RDS 格式支援與 Promise 類型關聯的 PROMSXP 物件程式碼有關,該程式碼用於定義在使用與其關聯的值時非同步呼叫的表達式。
在反序列化過程中,Promise 物件由三個元件定義:Promise 值、表達式和環境。如果 Promise 類型沒有預先計算的值,則在反序列化過程中會透過使用「eval」函數執行表達式來計算一個值。透過這種方式,攻擊者可以透過將其替換為 RDS 或 RDX 檔案中與未計算值關聯的表達式來執行任意 R 程式碼。
來源: opennet.ru
