攻擊原理與觸發條件

此漏洞允許能存取 SSH 端口的攻擊者在不知道任何密碼的情況下登入系統。攻擊只需建立一次連線即可成功,不需要重複嘗試。

攻擊者需要知道一個密碼欄位為 *(即未設定密碼的帳號,常見於僅使用金鑰驗證的帳號)的名稱,且該機器上必須至少有一個其他帳號擁有 $5$ 或 $6$ 開頭的密碼雜湊值。

攻擊者隨後發送一個長度介於 257 到 1024 位元組的超長密碼。只要系統中有一個帳號具備有效密碼雜湊,就能讓所有無密碼帳號變得可被存取。

受影響與不受影響的系統範圍

若同時滿足以下條件,系統即受影響:執行未編譯 PAM 支援的 openssh-server 套件,或設定 UsePAM no;PasswordAuthentication 設為 yes(OpenSSH 預設值);系統中存在密碼欄位為 * 的帳號;且至少有一個本地帳號擁有 $5$ 或 $6$ 開頭的密碼雜湊。

常見的無密碼帳號包括 Alpine 3.16 之後基礎映像中的 root 帳號(root:*)、透過 adduser 建立但未設密碼的金鑰專用使用者、以及透過 musl-nscd 從目錄服務取得的使用者。官方 tiny-cloud 映像中的 alpine 使用者也屬於此類。

不受影響的情況包括:容器內未執行 sshd 的 Docker 環境;已設定 PasswordAuthentication no 的系統;使用 openssh-server-pam 且 UsePAM yes 的系統;密碼欄位為 ! 的鎖定帳號;以及透過 cloud-init 自動停用密碼驗證的雲端映像。

修復步驟與操作注意事項

最直接的修復方式是執行 apk upgrade -U -a 升級套件,並隨後重啟 sshd 服務(rc-service sshd restart)。僅升級套件不會自動重啟正在執行的 daemon,因此必須手動重啟才能生效。

各版本分支對應的修復後 openssh 版本如下:edge 為 10.6_p2-r0,3.24 為 10.3_p1-r2,3.23 為 10.2_p1-r1,3.22 為 10.0_p1-r11,3.21 為 9.9_p2-r1。舊版支援終止的分支如 3.20 至 3.16 也已發布對應修復版本。

若無法立即更新,可透過設定停用密碼驗證來關閉漏洞。建議先確認 SSH 金鑰登入功能正常,並保持現有工作階段開啟直到測試新連線成功後再關閉。

無法更新時的臨時緩解措施

對於 Alpine 3.19 及以上版本,可透過建立 drop-in 設定檔來停用密碼驗證。執行 mkdir -p /etc/ssh/sshd_config.d 並創建包含 PasswordAuthentication no 的檔案。

同時需使用 sed 指令修改 /etc/ssh/sshd_config 中所有 PasswordAuthentication yes 的行為 no,並在檔案頂部插入該設定以確保生效。原始設定檔會備份為 sshd_config.bak。

執行 sshd -t && rc-service sshd restart 檢查並重啟服務後,使用 sshd -T | grep -i passwordauthentication 驗證結果應顯示 passwordauthentication no。若要還原,刪除 drop-in 檔案並從備份檔恢復設定即可。

雲端映像與舊版支援狀態

官方 tiny-cloud 映像(qcow2, VHD, AMI)在 3.18.11 至 3.24.3 版本中預設包含一個密碼欄位為 * 的 alpine 使用者及免密 doas 權限。首次啟動時安全,但一旦系統中存在任何 $6$ 雜湊(例如管理員設定控制台密碼或 user-data 新增用戶),攻擊者即可取得 shell 並透過 doas 提權至 root。

從 3.21.10、3.22.8、3.23.8、3.24.4 及之後版本建構的映像已包含修復套件。較早版本的運行實例仍需手動更新 openssh 或停用密碼驗證。

雖然 Alpine 3.21 已於 2026-11-01 結束支援,但官方仍為所有受影響版本(包括 3.16 至 3.20)發布了修復套件,建議用戶盡快套用。

技術成因與偵測方法

當 sshd 未編譯 PAM 支援時,它透過 crypt() 函數將輸入密碼雜湊化並與儲存欄位比較。對於儲存欄位過短無法包含 salt 的帳號,sshd 會借用其他帳號的 salt。

musl libc 的 crypt() 函數在輸入超過 256 位元組時會回傳字串 * 作為錯誤指標。由於無密碼帳號的儲存欄位正是 *,導致雜湊比對成功而允許登入。OpenSSH 10.6p2 已修正此行為,穩定分支套件則透過補丁解決。

檢查 /var/log/messages 中是否有 Accepted password for 後接無密碼帳號(如 alpine, root)的記錄。若無法排除被攻擊的可能性,應將機器視為已遭入侵並審查 doas 使用紀錄、近期建立的使用者及 authorized keys。