一個 Agent 可以被限制成唯讀存取程式碼,工程師仍可能把它取得的遠端輸出直接印在本機終端。若輸出含有終端控制序列,顯示過程就會進入另一套解析器;「沒有讓 Agent 執行指令」不足以描述整條資料路徑。
Ghostty 1.4.0 發布說明於 2026 年 10 月 27 日列出十項安全公告。以下挑三種不同的觸發方式,說明開發環境應如何處理外來內容。這三份公告的受影響版本均為 ≤ 1.3.1,修補版本為 1.4.0,官方分類均為 Moderate。到 10 月 28 日查核時尚未列出 CVE 編號,公告也沒有提供已遭實際利用的證據。
這次依官方發布說明與安全公告查核,沒有安裝 Ghostty、執行攻擊樣本或測量效能。後面的工作流程是工程建議與待執行的驗收設計。
顯示輸出就會進入圖形協定解析器
Kitty graphics 公告描述多個驗證與資源管理缺陷。惡意輸出可造成當機、卡住或大量記憶體消耗;Unix-like 系統在特定條件下,還可能讀取或刪除不應碰到的本地檔案。受害者需要讓該輸出被顯示,例如閱讀特製檔案或連上攻擊者控制的遠端主機,解析圖形命令前不會另跳確認。
檔案影響有具體限制。公告舉出暫存路徑使用字串前綴判斷,以及路徑驗證與開啟之間存在競態等問題;這不等於每段惡意輸出都能無條件讀取任意檔案。對維運流程而言,已足以否定「只是看日誌所以不會執行任何解譯」這個假設。
假設訂單團隊讓 Agent 收集第三方服務的診斷輸出,然後顯示給值班工程師。我的建議是保留原始檔供追查,日常檢視則經過有明確控制字元處理規則的文字呈現層。單純去掉顏色並不證明所有控制序列都被處理;原始檔也不該在檢查完成前直接回放到終端。
這會犧牲顏色、圖片與部分互動資訊。只有需要完整終端行為時,才在已更新、沒有生產憑證的隔離環境重現。容器內的程式輸出若最後仍由主機 Ghostty 解析,容器不會自動隔離主機的終端解析器。
macOS 超連結需要點擊,與圖形解析的條件不同
OSC 8 公告指出,macOS 舊版會把輸出提供的連結目標交給系統開啟機制。攻擊者若能提供位於已知路徑的惡意檔案,或利用危險的已註冊 URL handler,再誘使使用者 Command-click,就可能以使用者權限執行指令。單純渲染該序列不會開啟目標。
1.4.0 加入 macOS 的安全開啟政策:驗證 Web 與郵件 URL、確認自訂 scheme、阻擋不安全的本地目標,並清理會隱藏或重排目標的顯示字元。新版也新增 link-osc8 選項,可停用這類連結;1.4.0 以前沒有只停用 OSC 8 的設定。
因此,升級前不點開不可信輸出的連結,是這個入口的暫時措施,但不會修補上一節的圖形解析問題。連結預覽在受影響版本也可能受到字元干擾,不能把「滑鼠移過去看起來正常」當成唯一核准依據。
貼上保護取決於接收輸入的程式
Carriage return 公告則涉及剪貼簿。舊版沒有把 carriage return 當作換行,可能在沒有預期確認的情況下,把它送進終端並產生 Enter 的效果。這需要使用者複製、貼上惡意文字,而且接收程式沒有使用 bracketed paste mode。
官方指出,預設啟用 bracketed paste 的互動式 Bash、Zsh 與 Fish 不受這個特定問題影響,其他輸入情境仍可能受影響。不能只確認登入 shell 是 Zsh,就替每個子程式的輸入模式背書。
1.4.0 把 carriage return 與 newline 一起納入貼上檢查。公告沒有提供能在舊版徹底防止此問題的設定。因此,「小心貼上」只能降低曝露,升級才是修補動作。
用三份證據驗收升級
暫停回放不可信原始輸出,直到實際使用的終端已更新且顯示路徑完成檢查。 這是保守的工作流程停止條件,不代表所有輸出來源都已遭入侵。
驗收可以分成三份紀錄:
- 記下實際啟動的 Ghostty 版本、來源與更新後的新行程。套件管理器顯示已下載,不足以證明目前開著的視窗已使用新版。
- 列出會送進終端的外部資料,包括 CI 日誌、遠端 SSH 輸出與 Agent 工具結果,標示哪些直接回放、哪些經過文字轉義,以及誰能產生內容。
- 在無敏感資料的測試環境,檢查正常日誌仍可讀、控制字元能以可見形式呈現,以及貼上與連結操作符合所採用版本的預期。這些是驗收項目,不是已執行的測試結果;不需要把網路上的攻擊 payload 貼進工作用 shell。
站內的 MCP Toolbox 儲存邊界分析處理工具能讀寫哪些資源。終端還需要追查工具回傳的位元組會交給誰解讀。今天可以從一條常用的 Agent 日誌輸出路徑開始,把資料來源、顯示程式版本與互動動作一起記進升級清單。
