Skip to content

安全模型 ​

keymitt 讓代理使用憑證,而值不會進入代理的上下文。這一頁精確說明它能防什麼——以及不能防什麼。

keymitt 防得住的 ​

威脅對策
密碼跑進代理的上下文、對話紀錄或日誌代理只看得到 {{secret:NAME}}。回傳的一切——輸出、回應標頭與內容、檔案內容、錯誤訊息——都會遮蔽:所有密碼的值,加上 base64(任何對齊位置)、各種 URL 編碼、hex 與 JSON 跳脫形式。輸出在大小上限被截斷時,可能是「被上限切斷的密碼開頭」的位元組會先丟掉,所以不會回傳任何片段。
其他程序看得到密碼絕不放進命令列參數。暫存檔僅限擁有者,執行完覆寫後刪除。
你不知道的情況下密碼被使用每次使用都要通過代理按不到的視窗核准。視窗先寫密碼與解析後的程式(或目的地),再列出參數、stdin、環境變數、暫存檔與目錄——或方法、網址、標頭與內容開頭——不可見字元一律跳脫。無法完整顯示的請求直接拒絕。
密碼被交給冒牌程式程式只在 PATH 的絕對路徑目錄中尋找;--command 會存下完整路徑。
密碼被送到不該去的地方每組密碼各有程式與主機的允許清單。http_request 拒絕網址裡的佔位符與帳密、標頭注入、Host 這類傳輸標頭、非 HTTP(S) 協定與重新導向,並忽略 ~/.curlrc。
被允許的程式透過環境變數遭劫持變數只能帶密碼、值必須剛好是一個佔位符,而且絕不能是載入器、直譯器、工具、代理伺服器、CA 或 PATH 類的變數。政策可以再固定允許的名稱。
密碼在指令結束後還留著在 macOS 與 Linux 上,每次執行結束時整個程序群組都會被終止。
read_file_redacted 繞過用戶端的讀檔規則只能讀工作目錄與設定的目錄;憑證存放處、金鑰檔、FIFO 與裝置檔一律拒絕。
一次匯出全部密碼備份與還原只能從命令列執行、需要互動式終端機,而且一律需要強驗證。

keymitt 防不住的 ​

這些來自「和代理以同一個作業系統使用者身分執行」這件事本身。

  • **擁有不受限 shell 的惡意代理。**它可以繞過 keymitt:直接讀 Linux 的 Secret Service 或 Windows 認證管理員 (任何以你身分執行的程序都可以)、修改 policy.toml,或寫入終端機核准的決定檔。在 macOS 上,其他程式讀取 keymitt 的鑰匙圈項目會觸發系統視窗——門檻比較高,但不是保證。請保持用戶端本身對 shell 指令的權限確認。
  • **被核准的程式拿到密碼後做了什麼。**參數與 stdin 決定它去哪裡——兩者都在視窗裡,請看清楚。API 呼叫優先用有主機限制的 http_request。絕不要把 shell 或直譯器加進允許清單。
  • 會從工作目錄讀設定的程式,例如讀 .git/config 的 git。視窗上會顯示目錄;在不信任的 repository 裡要小心。
  • 弱驗證只確認意圖、不驗證身分。用 allow_weak = false 或 method = "native" 可以禁止。
  • polkit 的視窗本身是通用訊息;在 Linux 上,細節會在它之前以通知顯示。
  • **read_file_redacted 的遮蔽不是安全邊界。**允許目錄裡格式特殊的憑證仍可能被顯示;請別把憑證檔放在可讀目錄裡。
  • **被轉換過的值。**程式把值雜湊、加密、反轉、換行或拆開,遮蔽就抓不到。
  • **Windows 的程序樹。**執行結束時只會終止直接的子程序。
  • 作業系統帳號或鑰匙圈本身被入侵。

設計決定 ​

  • MCP 伺服器只在啟動時讀一次政策,而且從不寫入。代理沒有任何工具能改政策或核准設定。
  • 預設不快取核准。設定 ttl_secs 時,也只記住「位元組完全相同、而且解析到同一支程式」的請求。
  • 在驗證視窗按取消就拒絕請求;不會改用較弱的方式重試。
  • 每次決定都記錄 elapsed_ms,不合理的快速核准在稽核紀錄裡一眼就看得出來。
  • 輸入有上限:參數、stdin、每個暫存檔與請求內容各 1 MiB。
  • 每個請求才從鑰匙圈讀值,用完就丟。代入後的模板與備份明文使用會自動清零的緩衝區。
  • testing 建置功能絕不能在要安裝或散布的版本裡開啟。

發佈與安裝程式 ​

發佈用的壓縮檔由 GitHub Actions 建置:action 鎖定 commit、建置工作只有唯讀權杖、不用建置快取。每個版本都附 SHA256SUMS.txt 與簽章的建置來源證明(gh attestation verify <壓縮檔> --repo walisayu/keymitt)。一鍵安裝程式會驗證 校驗碼、拒絕明文 HTTP、解壓前逐一檢查壓縮檔路徑且只取出執行檔;shell 版的下載被截斷時什麼都不會執行。

回報漏洞 ​

請透過 GitHub security advisories 私下回報,不要開公開的 issue。

以 MIT 或 Apache-2.0 授權釋出。