前言
在 2024 年 7 月 2 日,OpenSSH 爆出了 CVE-2024-6387 的 CVE,主要是在 SSH 伺服器 (sshd) 中發現了一個競爭情況(race condition),使用者沒有在預設的 120 秒(舊版本為 600 秒,這個秒數稱為 LoginGraceTime)內進行身份驗證時,sshd 的 SIGALRM 處理程序會被異步呼叫。然而,這個信號處理程序會呼叫多個非異步信號安全的函數,例如 syslog()。攻擊者利用此漏洞,可能導致具有 root 權限的遠端程式碼執行(remote code execution,RCE)。
受影響的版本
- OpenSSH < 4.4p1。
- 8.5p1 ≤ OpenSSH < 9.8p1。
Ubuntu 的修復方式
在此,如果有啟用 Ubuntu Pro 的話,可以發現系統的 SSH 已經更新並修復:
|
|
在此處有看到的 SSH 版本雖然為 OpenSSH 9.6p,但已經套用修正補丁(patch)。也因此不需要將系統中的 SSH 進行升級。
使用的還是原本的 OpenSSH 9.6p 版本。可能由於相容性問題,無法直接升級整個 OpenSSH,因此需要在此版本上進行修改和測試以修補漏洞。在完成漏洞修補後,會利用 Git 的 format-patch 來建立補丁(patch),並在編譯時套用(apply)此補丁後再進行編譯。這類技巧在編譯時相當常見。
從 Ubuntu 維護的 OpenSSH 可以看到提交 19e460 中,帶有 CVE-2024-6387.patch。這個補丁主要會將 log.c 中的 sshsigdie 函數進行修改,使其在呼叫此函數時,只執行 _exit(1) 直接跳出而不執行 sshlogv進行日誌記錄,從而避免因競態條件而產生的潛在安全漏洞。
|
|
結論
目前 Ubuntu 節至 2024/7/2 已經為 Jammy (22.04)、Mantic (23.10)、Noble (24.04) 釋出此修正版本。即便未釋出修正的系統。根據目前 Ubuntu 的官方初步解法,可以通過在 /etc/ssh/sshd_config
中,把 LoginGraceTime 設定為 0 以防範這個漏洞,不過可能會引發其他的問題(阻斷攻擊)。
該漏洞目前已經在 32 位元 Linux/glibc 系統上測試漏洞的示範,攻擊時間平均需要 6~8 小時達到服務器可接受的最大連接數量。儘管目前尚未在 64 位系統上成功,但未來有可能得到改進進而成功駭入。此外,目前對於 Windows 與 macOS 上的可利用性不明確。
大多數的使用者,可以在官方釋出更新檔時,透過管理包進行更新即可。