1169 字
6 分鐘

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> 是你電腦上的埠:

Terminal window
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#

先記錄版本,不要只看作業系統套件管理器顯示的套件名稱:

Terminal window
gh version

如果版本落在 2.28.02.97.x,優先升級再重新啟動轉發。轉發已經在執行時,可以用作業系統工具查看本機埠目前綁定的地址:

Terminal window
# macOS
lsof -nP -iTCP:<local-port> -sTCP:LISTEN
# Linux
ss -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:

Terminal window
brew upgrade gh
gh version

其他作業系統請依 GitHub CLI 官方安裝方式 更新,然後確認 gh version 顯示 2.98.0 以上。不要只更新某台開發機;CI、跳板機或共用工作站只要仍執行舊版,都可能保留相同風險。

在無法立即升級時,先停止目前的轉發,避免在不受信任或多人共用的網路上使用受影響版本。必要時可暫時以主機防火牆阻擋轉發埠的入站連線,但這只能降低暴露面,不能取代升級。

2.98.0 之後仍要檢查 --all-interfaces#

修補版的預設行為是 loopback;只有明確指定以下旗標,才會回到所有網路介面監聽:

Terminal window
gh codespace ports forward <remote-port>:<local-port> --all-interfaces

這個選項不是「更安全的預設值」,而是讓你在測試手機、區網裝置或其他需要連線的情境下刻意暴露本機埠。使用前至少確認:

  1. 被轉發服務沒有管理員操作或敏感資料,或已經有獨立的驗證層。
  2. 主機防火牆只允許預期的來源網段。
  3. 轉發程序結束後,listener 確實消失。
  4. 工作完成就移除 --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 的本機介面暴露

GitHub CLI 2.98.0 release notes

GitHub CLI 手冊:gh codespace ports forward

gh codespace ports forward 有風險?先升級 GitHub CLI 2.98.0
https://laplusda.com/posts/github-cli-codespace-port-forward-security/
作者
Zero
發佈於
2026-08-25
許可協議
CC BY-NC-SA 4.0
這篇文章有幫助嗎?

回報錯字、失效連結,或告訴我你想看的延伸主題。