SSH 是伺服器、路由器與各種自架服務最常用的遠端登入通道,只要 sshd 的密碼驗證出問題,影響的就是「能不能擋住陌生人」這件事。
OpenSSH 專案在 2026 年 11 月 5 日釋出 10.6p2,處理一個可以用超長密碼繞過 sshd 密碼驗證的問題。
受影響的不是所有 Linux,而是使用 musl libc、且 sshd 沒有啟用 PAM 的系統,Alpine Linux 是官方明確點名的例子。
這個漏洞的編號是 CVE-2026-123158,美國 CISA 已在 11 月 9 日把它列入已知遭利用漏洞目錄(Known Exploited Vulnerabilities Catalog),代表已有實際攻擊。我們來看看該怎麼更新、怎麼確認自己有沒有中。
先做這件事:更新 OpenSSH
最直接的做法:更新 openssh 套件,然後重新啟動 sshd。
Alpine 官方公告特別強調,只升級套件不會換掉正在跑的 sshd 行程,一定要重啟才算完成。
- 更新套件:
apk upgrade -U -a
- 重新啟動 sshd:
rc-service sshd restart
以上兩個指令取自 Alpine 官方公告,適用於 Alpine。其他發行版請改用自己的套件管理器與服務管理指令,並以該發行版的安全公告為準。
怎麼確認自己的版本有沒有受影響
先搞清楚兩件事:你的系統用哪種 C 函式庫(libc),以及 sshd 有沒有啟用 PAM。
站長自己的看法是,這一步比比對版本號更重要,因為這個漏洞的條件是「系統環境」,不是單看 OpenSSH 版本。
第一步:確認是不是 musl
ldd --version
輸出若出現 musl,就是 musl libc 系統。依 sshhole.com 的整理,Alpine、OpenWrt、Buildroot、Yocto 與以 Alpine 為基底的 Docker 映像檔屬於 musl 系統;同一頁也指出 Debian、Ubuntu、Fedora 使用 glibc 且通常經 PAM 驗證,不受影響,RHEL 則未在該頁說明。
第二步:確認設定
sshd -T | grep -i -E "passwordauthentication|usepam"
Alpine 官方公告列出的受影響條件,需要同時成立:
| 條件 | 說明 |
|---|---|
| 沒有使用 PAM | Alpine 的 openssh-server 套件沒有 PAM;openssh-server-pam 且 UsePAM no 也算 |
| 開著密碼登入 | PasswordAuthentication yes,這也是 OpenSSH 預設值 |
有密碼欄位為 * 的帳號 | 例如只用金鑰登入、沒設密碼的帳號,Alpine 上的 root 也是這類 |
至少一個帳號有 $5$ 或 $6$ 開頭的密碼雜湊 | 只要有一個,所有沒設密碼的帳號都會曝險 |
openssh-server-pam 搭配 UsePAM yes、PasswordAuthentication no,以及密碼欄位是 !(鎖定帳號)的情況,官方列為不受影響。
第三步:對照修補版本
一般人看 ssh -V 或套件版本時容易誤會:發行版常把修補放進自己的舊版本,版本號不會跳到上游的 10.6p2。
實例:Alpine 3.23 的修補版本是 10.2_p1-r1,編號比 10.6p2 低,但這個版本已經帶著同一個問題的修補。所以判斷方式是對照「自己那個分支」的修補版本,而不是只看有沒有 10.6。
下表取自 Alpine 官方公告,每列一個分支:
| Alpine 分支 | 修補後的 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.16 到 3.20 這些較舊的分支官方也有提供修補套件,完整清單請看 Alpine 官方公告。
查自己裝的版本:
apk policy openssh-server
apk policy 是 Alpine 官方 wiki 列出的查詢指令,會顯示這個套件已安裝與可安裝的版本;如果裝的是 openssh-server-pam,就把套件名稱換掉。套件版本大於等於上表對應分支的數字,就是已修補;否則先更新。
漏洞內容與觸發條件
OpenSSH 官方 release notes 的描述是:沒有 PAM 支援的情況下,部分 Linux 系統上存在可透過 sshd 利用的密碼驗證繞過。專案認為根本原因在 sshd 之外,但可以在 sshd 這一側避開。回報者是 Wakefield 的 Özgün Kültekin。
白話說明如下。
為什麼會中
依 Alpine 公告的技術說明:沒有 PAM 時,sshd 會用 crypt() 把輸入的密碼做雜湊,再拿結果去比對密碼欄位。
musl 的 crypt() 遇到超過 256 位元組的密碼會失敗,並回傳 *。沒設密碼的帳號,密碼欄位剛好也是 *,兩邊一比對就相符,登入通過。
攻擊長什麼樣子
Alpine 公告寫的是,密碼長度介於 257 到 1024 位元組,一次連線就能成功,不需要重試。
官方資料沒有提到暴力猜測,這類攻擊也不需要猜到真正的密碼。
CVE 編號
這個漏洞的編號是 CVE-2026-123158。Alpine 公告發布當下還沒有編號,之後才由 MITRE 指派,美國國家漏洞資料庫(NVD)列出的 CVSS 3.1 分數是 8.1(High)。
美國 CISA 在 2026 年 11 月 9 日把它加入已知遭利用漏洞目錄,名稱是「OpenBSD OpenSSH Unexpected Status Code or Return Value Vulnerability」,聯邦機構的修補期限是 11 月 12 日。列入這份目錄,代表 CISA 掌握到已有實際利用的證據,有符合條件的機器請不要再拖。
要不要檢查有沒有被登入過
Alpine 公告建議,到 /var/log/messages 找 sshd 的 Accepted password for 紀錄,看是不是出現在沒設密碼的帳號(例如 alpine、root 或只用金鑰的帳號)上;也建議檢查 doas 使用紀錄、新建帳號與 authorized_keys 的異動。公告的說法是,無法排除被登入的話,就把機器視為已遭入侵。
暫時無法更新怎麼辦
OpenWrt、嵌入式系統這類韌體要等廠商出更新,不一定能馬上升級。官方提供的暫時做法是關掉密碼登入。
- 先確認金鑰登入可用,並保留目前的連線視窗,另開一個視窗測試新登入。
- 在
/etc/ssh/sshd_config.d/放一個設定檔,內容為PasswordAuthentication no。Alpine 3.19 起預設會讀這個目錄,更舊的版本不會讀,要直接改sshd_config。 - 若
sshd_config裡有PasswordAuthentication yes(包含Match區塊內),要改成no。 - 用
sshd -t檢查設定,再重啟 sshd。 - 用
sshd -T | grep -i passwordauthentication確認結果是passwordauthentication no。
Alpine 公告也說明,另一個條件是用 openssh-server-pam 並設定 UsePAM yes 就不受影響。
參考資料與延伸閱讀
- OpenSSH Release Notes(10.6p2)
- Alpine Linux:OpenSSH Password Authentication Bypass 公告
- oss-security:OpenSSH 10.6p2 公告串
- NVD:CVE-2026-123158
- CISA Known Exploited Vulnerabilities Catalog:CVE-2026-123158
- Alpine Linux Wiki:Alpine Package Keeper
- sshhole.com:漏洞說明與受影響系統整理
- 原新聞:iThome〈【資安日報】11月6日,OpenSSH修補長密碼身分驗證繞過漏洞〉
發佈留言