Kernel-hack-drill 與利用 Linux 核心漏洞 CVE-2024-50264 (★
105 分)
這篇文章由資安研究員撰寫,深入剖析 Linux 核心漏洞 CVE-2024-50264 的利用方式,並介紹作者開發的實驗專案 `kernel-hack-drill` 在漏洞研究中的應用。該漏洞出現在 `AF_VSOCK` 子系統,問題源自 2016 年引入的一個競態條件,當 `connect()` 系統呼叫被 POSIX 訊號中斷時,導致核心在釋放結構後仍繼續使用,觸發 use-after-free (UAF) 式記憶體破壞。由於攻擊者即便不啟用使用者命名空間也能觸發,因而具高度危險性。這個漏洞被認為是最困難被利用的漏洞之一,並獲得 2025 年 Pwnie Award「最佳權限提升利用」獎。
作者最初於 2021 年研究 `AF_VSOCK` 的漏洞,後來在 2024 年再次進行 fuzz 測試時發現錯誤,但由於難度太高暫時擱置。直到其他研究員先公開 CVE-2024-50264 後,他才決定繼續鑽研,不採用原本極為複雜的 BPF JIT、SLUBStick 和 Dirty Pagetable 組合手法,而是尋找更簡化的 exploit 策略。他透過觀察訊號 33(NPTL 保留的特殊即時訊號)能在不終止程序的情況下中斷 `connect()`,發展出穩定觸發漏洞的辦法,進一步藉由 cross-cache 技術讓已釋放的 `virtio_vsock_sock` 覆蓋到其他物件如 `msg_msg`、`pipe_buffer`,形成資訊洩漏與任意位址讀寫 (AARW) 的原語,最後能修改 `struct cred` 以竄改程序身分,達成 root 權限提升。
值得一提的是,作者利用 `kernel-hack-drill` 這個早年為教學所寫的小專案,大幅簡化 exploit 原型測試。這套工具包含可控的 UAF 弱點模組與範例程式,讓研究員能安全複現、驗證記憶體破壞並實驗跨配置攻擊 (cross-cache attack)。作者指出,雖然最新 Ubuntu Kernel 提供 `CONFIG_RANDOM_KMALLOC_CACHES` 與 `CONFIG_SLAB_BUCKETS` 等強化機制,這雖然擋掉一般 heap spray 攻擊,但反而讓 cross-cache 更穩定;若缺乏進一步防禦如 SLAB_VIRTUAL,Linux 核心仍對此類攻擊敞開大門。
在 Hacker News 的討論中,多數人對作者的技術分析表示敬佩,認為能逐步拆解競態漏洞並設計新手法非常不易。有讀者提到,文章篇幅龐大卻一次完整呈現,通常可拆成多篇系列文;也有人指出作者背景來自受制裁的俄羅斯公司,但多數關注仍放在技術本身。值得注意的討論之一是關於「研究員應否同時修補漏洞」的爭議,有人認為安全研究員通常缺乏動力或獎勵去提交修補程式,因為公開 exploit 可能能換取更高額的漏洞獎金。也有人反駁,若能成功開發 exploit,自然也具備修補漏洞的能力,問題在於整體生態誘因而非技術能力的不足。
另外,有讀者將此與 Linux 對 Rust 的採用遲緩連結,認為核心老化的 C 寫法才讓這類競態與記憶體錯誤層出不窮;也有人自嘲「一旦到了低階層級就感覺自己毫無用武之地」,對 exploit 研究員的技巧深感欽佩。雖然整篇文章閱讀難度極高,但社群普遍認為這是展示頂級低階資安研究成果的代表作,結合理論創新、工具改良與實際 PoC,充分體現了漏洞開發與系統防禦之間的拉鋸戰。
👥
12 則討論、評論 💬
https://news.ycombinator.com/item?id=45112996