Problem
plugins/macdoc/hooks/session-start.sh 的 sha256 + Developer ID 閘只保護新下載的候選檔;已經住在 ~/bin/macdoc 的常駐 binary 每個 session 被無條件執行,從不重驗簽章。
#(原文此行以 5 秒 alarm 執行 "$BINARY" --version 並將輸出寫入 $PROBE;因含 perl 特殊變數、會誤觸 issue 派送的 mention 防護,改以說明取代,語義不變)
HAVE=$(head -1 "$PROBE" 2>/dev/null | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1 || true)
...
[ "$HAVE" = "$WANT" ] && exit 0 # fast path: version matches, zero network
fast path 只比對版本字串就 exit 0,之後的 codesign 檢查完全不會跑到。而版本字串是常駐 binary 自己印的——被替換過的 binary 只要印出正確版本就永遠通過。下方的 loop-guard sidecar(.macdoc.installed_version)同理。
同 repo 的姊妹 wrapper 已經做了這件事,且註解直指同一威脅:
plugins/che-word-mcp/bin/che-word-mcp-wrapper.sh:
# Exec-time re-verification: never exec an unverified binary, even one whose
# sidecar version matches (covers binaries installed by pre-hardening wrappers
# and post-install ~/bin tampering). Failure forces one re-download attempt.
if ! verify_binary "$BINARY"; then
macdoc 的 hook 缺少它姊妹已具備並明文說明的防護。
Type
bug
Expected
在 --version 探測之前(或至少在兩個 fast-path exit 之前)對常駐 $BINARY 重跑
codesign --verify --strict -R "$REQUIREMENT",與 che-word-mcp wrapper 一致。若判斷每 session 跑太貴,至少採較長的重驗週期,而非永不重驗。
Actual
「驗證過一次 → 從此無條件信任並執行」。檔案 header 宣稱的 fail-closed 契約對安裝成立,對執行不成立。
Impact
需要攻擊者已具備 ~/bin 的本機寫入權,因此不是遠端漏洞——但這是該檔自己宣告的契約沒有真正關上的缺口,且每個 session 都會靜默執行一次未經重驗的 binary。
macdoc CLI v0.6.0 剛透過這條 hook 發布並安裝,因此屬於同一批驗證範圍。
來源:5-reviewer ensemble verification of #158(security lens),已人工比對兩份 wrapper 原始碼確認差異屬實。
Problem
plugins/macdoc/hooks/session-start.sh的 sha256 + Developer ID 閘只保護新下載的候選檔;已經住在~/bin/macdoc的常駐 binary 每個 session 被無條件執行,從不重驗簽章。fast path 只比對版本字串就
exit 0,之後的codesign檢查完全不會跑到。而版本字串是常駐 binary 自己印的——被替換過的 binary 只要印出正確版本就永遠通過。下方的 loop-guard sidecar(.macdoc.installed_version)同理。同 repo 的姊妹 wrapper 已經做了這件事,且註解直指同一威脅:
macdoc 的 hook 缺少它姊妹已具備並明文說明的防護。
Type
bug
Expected
在
--version探測之前(或至少在兩個 fast-path exit 之前)對常駐$BINARY重跑codesign --verify --strict -R "$REQUIREMENT",與 che-word-mcp wrapper 一致。若判斷每 session 跑太貴,至少採較長的重驗週期,而非永不重驗。Actual
「驗證過一次 → 從此無條件信任並執行」。檔案 header 宣稱的 fail-closed 契約對安裝成立,對執行不成立。
Impact
需要攻擊者已具備
~/bin的本機寫入權,因此不是遠端漏洞——但這是該檔自己宣告的契約沒有真正關上的缺口,且每個 session 都會靜默執行一次未經重驗的 binary。macdoc CLI v0.6.0 剛透過這條 hook 發布並安裝,因此屬於同一批驗證範圍。