OpenSSH 問世以來第一個 RCE: CVE-2024-6387

來源
台灣電腦網路危機處理暨協調中心

內容
OpenSSH 從1995 年問世以來,這是第一次出現遠端執行任意程式碼(RCE)漏洞(regreSSHion),可以用最高管理員權限來遠端執行指令對系統控制,研究人員將它稱為regreSSHion。
OpenSSH 是一個基於 SSH 協定的開源軟體,常見於 Linux 中使用,作為遠端登入系統管理,也可進行遠端檔案傳輸,此次漏洞在2024 年 5 月被資安公司 Qualys 發現並將其命為regreSSHion(漏洞編號:CVE-2024-6387),漏洞問題出現在檔案 sshd中,可以讓未經授權的攻擊者以 root 身分執行任意程式。
sshd 是 OpenSSH Server 的設定檔案,其存在一個變數 LoginGraceTime ,若沒有更改這個變數值,預設是 120 秒,它是代表給予使用者進行身分驗證的時間,所以當使用者使用 ssh 連接時,超過 LoginGraceTime 設定的時間 (預設 120 秒) 沒有完成身分驗證,則 sshd 會去呼叫 SIGALRM 信號處理,並會呼叫不安全的非同步函數做處理,而攻擊者可以在此時利用競爭情況(race condition) 以最高管理員權限執行任意程式碼。
競爭情況 (race condition) 常見於多執行緒的系統,當多個執行緒同時存取或修改共享的資料時就會發生這個問題。
在 sshd 處理 SIGALRM 信號時,就有可能觸發競爭情況,而這就可能導致未預期的行為。
經過研究人員的調查,此漏洞實際上是CVE-2006-5051 的回歸,CVE-2006-5051 是在 2006 年由 Mark Dowd 發現,他跟此次漏洞一樣都是信號處理競爭情況的漏洞,可以讓攻擊者造成阻斷服務攻擊。
稱之為回歸是因為在 2020 年 10 月 OpenSSH 版本 8.5p1 的更新(commit 編號:752250c),把 OpenSSH 裡面 sshd 程式的 SIGALRM 信號處理函數 sigdie() ,刪除其中一行程式碼#ifdef DO_LOG_SAFE_IN_SIGHAND,而這也造成了:

OpenSSH 版本小於 4.4p1 會遭受漏洞影響,這是對 CVE-2006-5051 的錯誤修補
4.4p1 <= OpenSSH 版本 < 8.5p1 並無受此漏洞影響,因為 CVE-2006-5051 有添加 #ifdef DO_LOG_SAFE_IN_SIGHAND 8.5p1 <= OpenSSH 版本 < 9.8p1 再次容易受到威脅影響,因為 #ifdef DO_LOG_SAFE_IN_SIGHAND 意外被刪除了 Qualys 研究人員指出雖然漏洞影響很大,但要實際攻擊成功並不容易,在他們的測試實驗上,平均測試連線 1 萬次才成功一次做到攻擊。 研究人員用兩個不同的作業系統做測試,以 ubuntu-6.06.1-server-i386.iso 這個 Ubuntu 版本測試,平均成功攻擊一次約需要 1 ~ 2 天,而用 debian-12.5.0-i386-DVD-1.iso (這是目前 Debian 穩定版),平均攻擊成功一次約需要 6 ~ 8 小時。 目前研究人員透過 Shodan 和 Censys 對全世界網路進行掃描,有超過 1400 萬台的 OpenSSH Server 暴露在網路上。 而 Qualys 研究人員表示裡面存在 70 萬個 OpenSSH Server 處在易受攻擊的狀態。 受影響的軟體版本: OpenSSH 版本 < 4.4p1 8.5p1 <= OpenSSH版本 < 9.8p1 為了避免被攻擊,建議使用者: 升級 OpenSSH 到最新的版本 9.8p1 來修復此漏洞 如果暫時不能更新 OpenSSH ,則可以更改 sshd 的變數 LoginGraceTime ,將其設定為 0 ,惟可能會遭受阻斷服務攻擊