TS-2026-009:Tailscale SSH 的不安全參數處理可導致取得 root 權限 (★
101 分)
Tailscale 公布的 TS-2026-009 是一項涉及 Tailscale SSH 的權限提升漏洞。Linux 主機上的 Tailscale SSH 先前接受以連字號(-)開頭的使用者名稱,並將名稱傳給 getent(Unix/Linux 用來查詢系統帳號資料的工具)。攻擊者若以 -i 作為登入名稱,getent 可能將其解讀為 --no-idn 選項,輸出整份 passwd 帳號檔案;由於內容從 root 帳號開始,Tailscale SSH 便錯誤開啟互動式 root 工作階段,使原本受限於非 root 權限的使用者繞過 ACL(Access Control List,存取控制清單)。
受影響的是在 Linux 主機上使用 Tailscale SSH,且以 autogroup:nonroot 規則限制 root 登入的環境。只要使用者原本已獲得該節點的 SSH 存取權,就可能以 -i 作為使用者名稱取得 root 權限。Tailscale 現已拒絕以連字號開頭的名稱,並在 1.98.9 及更新版本中修正問題;使用 Tailscale SSH 的管理者應升級所有相關節點。
Hacker News 討論指出,這屬於歷史悠久的指令列參數混淆與注入類型問題。多位留言者認為,單純禁止連字號開頭的名稱雖能阻止目前的攻擊,卻像是快速止血措施;更根本的作法應避免把使用者輸入直接傳給外部指令,改用 libc(C 標準函式庫)的 getpwnam(3) 等帳號查詢函式,或在不傳入使用者參數的情況下執行 getent,再自行解析結果。也有人指出,使用「--」分隔選項與參數在不同版本的 getent 上未必具備一致的可攜性,因此實作上仍需在安全性與 Linux 發行版相容性之間取捨。另一方面,限制特殊名稱也被視為防禦縱深,可避免未來相似錯誤再次出現。
留言者也關注 Tailscale SSH 為何具備開啟 root 工作階段的能力。討論中的解釋是,Tailscale SSH 並非單純將網路連線交給一般 OpenSSH,而是由 Tailscale ACL 規則管理、可代表不同系統帳號登入的包裝層;要完成這類功能,底層服務通常必須以 root 身分執行,因此也同時擁有 root 登入能力。若只使用 Tailscale 作為 VPN,再交由一般 OpenSSH 處理登入,便不會經過這次受影響的 Tailscale SSH 包裝層,但 OpenSSH 本身的權限與設定仍須妥善管理。
這起事件也引發對工具取捨的討論。部分使用者偏好 OpenSSH 長期累積的安全紀錄,另一些人則認為 Tailscale SSH 能集中管理權限、方便撤銷存取,對離線或分散部署的主機很實用;也有人選擇自架 WireGuard,或使用 Headscale(Tailscale 相容的自架控制伺服器)避免依賴第三方服務。至於公告採用 Tailscale 自有的 TS 編號而非 CVE(Common Vulnerabilities and Exposures,常見漏洞與暴露)編號,留言者認為自行發布可掌握揭露時程、降低通報機構的行政負擔;但安全掃描與合規工具通常較仰賴 CVE,後續取得正式編號仍可能有實務價值。
👥
42 則討論、評論 💬
https://news.ycombinator.com/item?id=48915004