20% 的 Linux 内核錯誤隱藏超過 5 年

Back
Category : News

唔耐之前,我哋講過 Linux kernel 入面第一個 Rust CVE,會搞到系統 crash。 同日,重有 159 個 C code CVE 發出。 雖然顯示 Rust 有進步,但同時都突顯咗一個更令人擔心嘅事;kernel 有好多 bug 隱藏咗好多年,先至俾人發現。

Pebblebed 上發佈咗一個研究 blog,展示 bug 點樣經常隱藏咗好多年,先至被發現同修復。

請注意,呢個研究講嘅係各種 bug。 唔係所有 bug 都係漏洞。

Linux Kernel 唔係完美

來源:Jenny Guanni Qu via Pebblebed

Jenny Guanni Qu,Pebblebed 嘅研究員,分析咗 125,183 個 bug,嚟自 20 年 Linux kernel 開發歷史(喺 Git 上)。 發現顯示,平均一個 bug 要 2.1 年先發現。 最長命嘅 bug,一個 networking code 嘅 buffer overflow,隱藏咗 20.7 年都冇人發現!

呢個研究係靠 kernel 開發用嘅 `Fixes:` tag 嚟進行。 基本上,當一個 commit 修復 bug 嘅時候,會包括一個 tag 指向引入 bug 嘅 commit。

Jenny 寫咗一個工具,從 kernel git 歷史(返到 2005 年)提取呢啲 tag。 工具搵晒所有 fixing commit,提取 referenced commit hash,從兩個 commit 拉日期,計算時間框架。

Fixes: tag 點用嘅例子喺左邊,Jenny 用嘅 dataset 參數喺右邊。

關於 dataset,佢包括超過 125k 記錄,嚟自 Linux 6.19-rc3,涵蓋 2005 年 4 月到 2026 年 1 月嘅 bug。 其中,119,449 係獨特 fixing commit,嚟自 9,159 個唔同作者,只有 158 個 bug 有 CVE ID。

另外,佢發現 kernel 唔同部分,bug 隱藏時間有好大差異。 CAN bus driver 平均最長 4.2 年,其次係 SCTP networking 4.0 年。 GPU bug 最快被捉到 1.4 年,BPF bug 喺 1.1 年內發現。

研究仲發現,唔完整修復好常見。 有人發現 undefined behavior,發佈修復,但修復唔完全解決問題。 有一個例子,2024 年 netfilter set field validation 嘅修復唔完整,一個 security researcher 一年後發現 bypass。

Jenny 嘅研究比我涵蓋嘅深得多。 佢仲開發咗一個 AI model 叫 VulnBERT,用嚟預測 commit 有冇引入漏洞。 上邊 link 嘅詳細 blog post 包括詳細技術解釋;一定要讀!

https://itsfoss.com/news/linux-kernel-bugs-arent-found-for-years/