GNU Screen 曝多漏洞:本地提權與終端劫持風險浮現
漏洞概述
SUSE安全團隊全面審計發現,廣泛使用的終端復用工具GNU Screen存在一系列嚴重漏洞,包括可導致本地提權至root權限的缺陷。這些問題同時影響最新的Screen 5.0.0版本和更普遍部署的Screen 4.9.x版本,具體影響范圍取決于發行版配置。
盡管GNU Screen是類UNIX系統中管理終端會話的核心工具,但研究顯示其存在重大風險——特別是當Screen以setuid-root權限安裝以支持多用戶功能時。
關鍵漏洞分析
(1) CVE-2025-23395:logfile_reopen()函數本地提權漏洞
最嚴重的漏洞允許本地權限提升。在Screen 5.0.0中,logfile_reopen()函數在重新打開用戶定義的日志文件時未能正確丟棄提升的權限,使得攻擊者可以向root所有的文件寫入任意數據。
報告警告稱:"非特權用戶可以在任意位置創建root所有的文件...所有寫入Screen PTY的數據都將被記錄到該文件中"。該漏洞可通過操縱日志文件的鏈接計數強制重新打開來觸發,已在采用setuid-root方式安裝Screen的Arch Linux和NetBSD系統上得到確認。
(2) CVE-2025-46802:終端重連競爭條件漏洞
另一個重大缺陷涉及多用戶會話重新連接時Attach()函數中的競爭條件。當被調用時,Screen會臨時將終端設備模式設置為0666,使系統上任何進程都能讀寫用戶的TTY。
SUSE表示:"我們使用簡單的Python腳本每兩到三次嘗試就能成功打開受影響的TTY"。雖然這種基于chmod的方法原本旨在實現會話守護進程間的通信,但卻為擊鍵攔截或命令注入創造了危險窗口。
(3) CVE-2025-46803:默認全局可寫PTY漏洞
Screen 5.0.0還將默認PTY模式改為0622,使其全局可寫。這使得任何用戶都能向Screen管理的PTY寫入數據,重現了TTY劫持漏洞的部分特征——現在這已成為默認行為。除非明確覆蓋編譯時配置,否則Arch Linux和NetBSD等發行版都會受到影響。
其他安全缺陷
(1) CVE-2025-46804:文件存在性信息泄露
通過濫用SCREENDIR環境變量,可誘騙Screen泄露root所有文件的存在及類型,揭示路徑是目錄、文件還是不可訪問。
(2) CVE-2025-46805:信號處理競爭條件
在對CVE-2023-24626的不完整修復中,Screen的信號發送邏輯仍存在競爭條件。攻擊者可利用權限檢查與實際信號發送之間的TOCTOU(檢查時間/使用時間)窗口,向非目標進程發送SIGHUP或SIGCONT等信號。
(3) strncpy()誤用導致的緩沖區溢出
雖然未分配CVE編號,但Screen 5.0.0中存在一個不可利用的緩沖區溢出問題。當用戶嘗試向活動Screen會話發送含多個參數的命令時,可能導致崩潰。該問題源于用strncpy()不當替換strcpy()的行為,在啟用FORTIFY_SOURCE保護的Arch Linux系統上已觀察到崩潰現象。
受影響發行版
發行版 | Screen版本 | 權限模型 | 受影響CVE |
Arch Linux | 5.0.0 | setuid-root | CVE-2025-23395, CVE-2025-46802, CVE-2025-46803, CVE-2025-46804, CVE-2025-46805, 緩沖區溢出問題 |
NetBSD 10.1 | - | setuid-root | 同上 |
Fedora 42 | 5.0.0 | setgid-screen | CVE-2025-46802(部分), 緩沖區溢出問題 |
FreeBSD 14.2 | 4.9.1 | setuid-root | CVE-2025-46802, CVE-2025-46804, CVE-2025-46805 |
Gentoo | 4.9.1/9999 | setgid-utmp/setuid-root | CVE-2025-46802(部分), CVE-2025-46805(setuid-root配置下) |
Debian 12.10 | 4.9.0 | 默認 | CVE-2025-46802(部分) |
Ubuntu 24.04.2 | 4.9.1 | 默認 | CVE-2025-46802(部分) |
安全建議
SUSE強烈建議現階段不要以setuid-root權限安裝Screen。報告指出,許多問題源于過時的權限管理模型和5.0.0版本代碼重構期間引入的退步。
SUSE建議:"Screen存在更廣泛的設計問題:它始終以提升的權限運行,僅針對被認為危險的操作選擇性丟棄權限。對于健壯的setuid-root程序,應該采用相反的方式:默認丟棄權限,僅在確實需要提升權限的操作時臨時獲取。"他們建議將多用戶支持設為可選功能,可能限制為受信任組使用,并提出更廣泛的架構變更以確保安全的權限處理。