gh codespace ports forward 有風險?先升級 GitHub CLI 2.98.0
如果你曾經執行 gh codespace ports forward,現在應先確認 GitHub CLI 版本。GitHub 的安全公告指出,2.28.0 以上、2.98.0 以前的版本,可能把本機轉發埠綁到所有網路介面;修補版 2.98.0 會預設只監聽 127.0.0.1。這不是 Codespaces 私有埠突然變成公開埠,而是本機建立的 listener 可能讓同一個區網、VPN 或其他可路由到你電腦的主機連進來。
直接處理方式是:升級到 GitHub CLI 2.98.0 或更新版本、停止不必要的轉發,並在刻意需要區網存取時才使用 --all-interfaces。如果服務本身沒有額外驗證,請把這個本機 listener 當成網路暴露面處理。
這個問題影響的是哪一層
執行以下命令時,<remote-port> 是 Codespace 內的埠,<local-port> 是你電腦上的埠:
gh codespace ports forward <remote-port>:<local-port>受影響版本會把本機埠綁在 wildcard address,例如 *:18000,而不是只綁 127.0.0.1:18000。因此,攻擊者不需要進入 Codespace,也不需要你的 shell 權限;只要你正在轉發、對方能路由到你的電腦,而且被轉發的服務沒有足夠的驗證,就可能讀取資料或呼叫會改變狀態的端點。
這不會改變 GitHub 端 Codespaces port 的 visibility。即使遠端服務仍然是 private,風險也可能發生在本機轉發程序建立的網路 listener。停止 gh codespace ports forward 後,這個特定轉發面就不再存在。
先檢查版本與目前的 listener
先記錄版本,不要只看作業系統套件管理器顯示的套件名稱:
gh version如果版本落在 2.28.0 到 2.97.x,優先升級再重新啟動轉發。轉發已經在執行時,可以用作業系統工具查看本機埠目前綁定的地址:
# macOSlsof -nP -iTCP:<local-port> -sTCP:LISTEN
# Linuxss -lntp | rg ':<local-port>\b'輸出應由實際環境判讀,不要只看程序名稱;重點是 local address 是否為 127.0.0.1:<local-port> 或 [::1]:<local-port>。GitHub CLI 2.98.0 也會回報實際的本機 listener address,重新執行時可把命令輸出一併留在排錯紀錄。
升級與暫時緩解
如果使用 Homebrew,可以先更新本機安裝的 GitHub CLI:
brew upgrade ghgh version其他作業系統請依 GitHub CLI 官方安裝方式 更新,然後確認 gh version 顯示 2.98.0 以上。不要只更新某台開發機;CI、跳板機或共用工作站只要仍執行舊版,都可能保留相同風險。
在無法立即升級時,先停止目前的轉發,避免在不受信任或多人共用的網路上使用受影響版本。必要時可暫時以主機防火牆阻擋轉發埠的入站連線,但這只能降低暴露面,不能取代升級。
2.98.0 之後仍要檢查 --all-interfaces
修補版的預設行為是 loopback;只有明確指定以下旗標,才會回到所有網路介面監聽:
gh codespace ports forward <remote-port>:<local-port> --all-interfaces這個選項不是「更安全的預設值」,而是讓你在測試手機、區網裝置或其他需要連線的情境下刻意暴露本機埠。使用前至少確認:
- 被轉發服務沒有管理員操作或敏感資料,或已經有獨立的驗證層。
- 主機防火牆只允許預期的來源網段。
- 轉發程序結束後,listener 確實消失。
- 工作完成就移除
--all-interfaces,回到 loopback 預設。
如果只是要在同一台電腦的瀏覽器開啟 Codespaces 內的開發伺服器,不需要這個旗標。
常見問題
Q: Codespaces 的 port visibility 已經設成 private,還需要升級嗎?
A: 需要。公告描述的是 GitHub CLI 在本機建立 listener 的方式,和 GitHub 端 port visibility 是不同邊界。private port 不會自動阻止能連到你本機網路介面的主機。
Q: 只要升級到 2.98.0,就可以放心使用所有轉發服務嗎?
A: 不代表服務本身安全。2.98.0 修正預設綁定位置,但被轉發的應用程式仍可能有未驗證的管理端點;若使用 --all-interfaces,還要依照主機防火牆和服務驗證策略自行限制來源。
Q: 沒有執行 gh codespace ports forward 也會被這個問題影響嗎?
A: 這個公告的必要條件是轉發程序正在執行。沒有 active forwarding 時,不會因為這個命令留下相同的本機轉發 listener;仍建議把 GitHub CLI 更新到修補版,避免下次啟動時再次踩到舊行為。
參考資料:
GitHub Security Advisory:
gh codespace ports forward的本機介面暴露
回報錯字、失效連結,或告訴我你想看的延伸主題。