問題出現喺 RDS zerocopy send path。呢個機制原本用嚟提升效能:
喺函式 rds_message_zcopy_from_user() 入面,kernel 會逐頁 pin 住 user memory pages 方便傳送。如果之後發生 page fault,錯誤處理流程會釋放之前 pin 住嘅 pages,但某些情況下會 錯誤釋放(double‑free)或者破壞 reference count。
呢個記憶體管理錯誤就成為提權 exploit 嘅基礎。
研究人員展示咗點樣將 RDS 嘅 bug 同 Linux 新一代 I/O 機制結合,變成一個可靠嘅提權方法。
攻擊者首先觸發 RDS zerocopy 傳送流程。當 page pinning 過程出現 page fault,錯誤處理邏輯會錯誤釋放 memory page,導致 kernel 出現 double‑free 或 reference count 錯亂。
下一步利用 io_uring fixed buffers。
io_uring 係 Linux 一個高效能非同步 I/O API,可以預先註冊記憶體 buffer。攻擊者可以操控呢啲 buffer,將之前被錯誤釋放嘅 physical pages 重新分配並控制內容。
如果被操控嘅 page 對應到 page cache(kernel 用嚟快取檔案內容嘅記憶體區域),攻擊者就可以改寫 page cache 入面嘅資料。
重點係:
公開 exploit 會針對 SUID‑root executable。
SUID(Set User ID)程式執行時會用檔案擁有者權限(通常係 root)。如果攻擊者改寫咗 page cache 裡面嘅程式內容,kernel 就可能執行被修改嘅版本,但仍然保留 root 權限。
漏洞存在於包含受影響 RDS zerocopy 實作嘅 Linux kernel,但實際風險取決於系統設定。
安全報告指出 Arch Linux 特別值得注意:
理論上任何 Linux 發行版都可能受影響,只要:
報告指出 Ubuntu、Debian、RHEL、AlmaLinux 嘅預設安裝通常 未啟用 RDS module,因此實際風險可能較低。不過管理員仍然應該確認 kernel configuration,而唔好只靠假設。
PinTheft 一般需要同時滿足幾個條件:
缺少其中某些條件,攻擊成功率會大幅下降甚至無法利用。
更新後必須 重新啟動系統,修補先會生效。
如果基礎架構唔需要 RDS,可以:
rds module攻擊鏈最後一步係利用 SUID binary。建議:
PinTheft 需要本地執行權限,因此以下環境應優先修補:
PinTheft 顯示現代 Linux kernel exploit 越來越常見嘅模式:將多個子系統組合成攻擊鏈。今次嘅例子就係將 RDS networking code 同 io_uring 非同步 I/O 機制結合。
即使係平時較少使用嘅 kernel module,只要同高效能功能結合,都可能變成高風險攻擊面。因此持續更新 kernel、停用不必要 module、以及縮減 attack surface,仍然係 Linux 系統安全最基本亦最有效嘅做法。
Comments
0 comments