rsync 一次修 33 個資安漏洞、AMD 記憶體控制器現繞過手法、Arm 分頁表邁向 128-bit
lwn.net、Samba rsync、GitHub、lkml.org · 2026-08-13
本週三則後端相關進展分別落在傳輸工具、CPU 記憶體控制器與 Arm 分頁表格式:rsync 發布 3.5.0 版一次修補 33 個資安缺陷;研究者展示透過 AMD 記憶體控制器的 bank swizzle 模式讀寫受保護的韌體記憶體;Linux 核心社群則貼出讓 arm64 支援 128-bit 分頁表項目的 RFC 修補集。三者彼此獨立,但都涉及「作業系統以下」那層的假設被打破或補強。
rsync 3.5.0:針對路徑處理與協定的一次性大修
rsync 3.5.0 是一次針對路徑處理與 daemon 協定的集中稽核成果,合計修掉 33 個由 VulnCheck 擔任 CNA 分配編號的資安缺陷,來源包含內部稽核、協定層 fuzzing 與外部研究者回報。多數問題屬於符號連結競態(symlink race),例如 CVE-2026-53802 可透過 --files-from 指向的符號連結讀取任意檔案,CVE-2026-53784 則是 use chroot = no 下的模組根目錄逃逸。
CVE-2026-53791(CRITICAL):proxy protocol = true讓直連的用戶端可偽造來源位址CVE-2026-70461:add_implied_include()中的一位元組堆積溢位CVE-2026-70456:read_args()在引數數量等於 maxargs 時的越界寫入CVE-2026-53790:未加引號的對端控制值造成的指令注入
行為層面的補強同樣值得注意:非 daemon 接收端現在只在符號連結的目的地屬於 root 或當前使用者時才會跟隨;路徑走訪一律改用 openat(O_PATH|O_NOFOLLOW) 逐層檢查,並在 Linux 5.6+ 上額外套用 RESOLVE_BENEATH 做核心層級的限制。每個修補都附上會在舊版上失敗的回歸測試。
AMD 記憶體控制器的 bank swizzle 繞過手法
安全研究者 Christopher Domas 在專案 skitter-creek-bath-salts 中展示,翻轉記憶體控制器(MCT/DCT)裡控制 bank swizzle 模式的單一位元,即可讓實體位址映射到 DRAM bank 座標的方式整段改寫,進而讀寫本應受硬體隔離的區塊。
xor dword [0xf80c2094], 0x00400000 ; 翻轉 bit 22,切換 bank swizzle 模式關鍵在於安全機制建立在記憶體控制器「之上」的位址空間假設,一旦控制器本身重新編排位址對應,原本的隔離邊界就形同虛設。研究者利用 z3 對 GF(2) 上的線性方程組求解,靠一組組 (target, alias) 位址配對還原被打亂的映射關係,藉此存取 PSP 私有 DRAM 保留區(0x7f800000)、SMRAM 的 SMI 進入向量、以及 C6 深度閒置狀態下暫存的 CPU 微碼副本。手法只在文件仍公開記錄轉譯暫存器的 AMD Family 16h 上驗證成功,17h 之後的世代因官方手冊拿掉相關說明而未獲確認,且全程需要 ring-0 權限,尚未有對應 CVE 或原廠公告。
Arm 邁向 128-bit 分頁表:FEAT_D128
Arm 核心維護者 Anshuman Khandual 在 2026 年 2 月貼出 [RFC V1 00/16] arm64/mm: Enable 128 bit page table entries 修補集,替 Armv9.3 起的選用特性 FEAT_D128 加上核心支援,啟用新的 VMSAv9-128 轉譯系統。啟用後每個分頁表項目寬度從 64-bit 變成 128-bit,換來更大的實體/虛擬位址範圍與更多可用的 MMU 管理位元,但每張表能容納的項目數也隨之減半。這也直接改變了各層級 leaf entry 覆蓋的記憶體大小。
| 分頁大小 | PMD(D64→D128) | PUD(D64→D128) |
|---|---|---|
| 4K | 2M → 1M | 1G → 256M |
| 16K | 32M → 16M | 64G → 16G |
| 64K | 512M → 256M | 4T → 1T |
整個系列共 16 個修補,分成通用 MM 改動與 arm64 平台改動兩段,最後以新設定選項 ARM64_D128 收尾,讀取分頁表項目改走各層級專屬的 pxdp_get() 存取函式以確保 128-bit 原子讀取。目前仍不支援 56-bit 虛擬位址空間、FEAT_D128 的跳層(skip level)功能,也還無法與 KVM、KASAN 或 UNMAP_KERNEL_AT_EL0 並用,但已通過多架構編譯與 MM kselftest。
原始來源:rsync 3.5.0 NEWS、skitter-creek-bath-salts (GitHub)、[RFC V1 00/16] arm64/mm: Enable 128 bit page table entries