Problem
scripts/pin-reference-model.sh 有 #115 的同款未修實例——而且比 #115 更嚴重。
發現於 #126(#116+#115 的 cluster PR)verify 的 Devil's Advocate。四個 verify leg 都從
baseline.json 往前追 model 欄位,沒有人往回追 sink 問「還有誰寫進這個地方」。
同款的三個要素
|
regression-gate.sh(#115,已修) |
pin-reference-model.sh(本 issue,未修) |
| 讀取 |
baseline.json 的 model |
baseline-meta.json 的 model(L19) |
| 驗證 |
✅ 白名單(#115 後) |
❌ 零驗證 |
| 路徑組合 |
同一個 sed 's/-\([^-]*\)$/_\1/' |
同一個 sed(L23) |
| Sink |
cd + find + shasum |
cd + find + shasum |
# scripts/pin-reference-model.sh:19,23
MODEL=$(/usr/bin/python3 -c "import json,sys; print(json.load(open(sys.argv[1]))['model'])" "$META")
MODEL_DIR="${1:-$CACHE_ROOT/openai_whisper-$(echo "$MODEL" | sed 's/-\([^-]*\)$/_\1/')}"
#115 的 sink 只比對 digest;本 issue 的 sink 把採集到的檔名與 sha256 持久化寫回
git-tracked 的 benchmarks/baseline-meta.json。DA 已實證:逃出 cache root 後,被竊取的
檔名與雜湊會寫進版控檔案。
加重因子:
baseline-meta.json 與 baseline.json 在同一目錄、同一 trust boundary,兩者都被 git ls-files 追蹤
baseline-meta.json 零測試覆蓋
regression-gate.sh 有 4 處指引操作者去跑這支腳本
Type
bug
Expected
pin-reference-model.sh 對 model 施加與 #115 相同的驗證。直接重用
scripts/lib/baseline-worklist.py(#116 已把驗證抽成獨立模組)或等價的共用通道——
不要複製第三份 regex,那正是本 class 反覆出現的根因。
亦需考慮:MODEL_DIR 可由 $1 覆蓋(L23 的 ${1:-...}),該路徑同樣未驗證。
Impact
scripts/pin-reference-model.sh
- 可能擴充
scripts/lib/baseline-worklist.py 使其能驗 baseline-meta.json 的 shape
- 測試(
baseline-meta.json 目前零覆蓋)
誠實 severity:MEDIUM(同 #115——需惡意 PR 混入受版控檔案;read-only traversal 非 RCE),
但持久化寫回 repo 這點使影響面大於 #115。
Source: surfaced during /idd-verify PR #126 — Devil's Advocate,四個 leg 全體漏掉。
DA 實證逃逸並確認資料寫入 tracked 檔案。
Problem
scripts/pin-reference-model.sh有 #115 的同款未修實例——而且比 #115 更嚴重。發現於 #126(#116+#115 的 cluster PR)verify 的 Devil's Advocate。四個 verify leg 都從
baseline.json往前追model欄位,沒有人往回追 sink 問「還有誰寫進這個地方」。同款的三個要素
regression-gate.sh(#115,已修)pin-reference-model.sh(本 issue,未修)baseline.json的modelbaseline-meta.json的model(L19)sed 's/-\([^-]*\)$/_\1/'cd+find+shasumcd+find+shasum為什麼比 #115 嚴重
#115 的 sink 只比對 digest;本 issue 的 sink 把採集到的檔名與 sha256 持久化寫回
git-tracked 的
benchmarks/baseline-meta.json。DA 已實證:逃出 cache root 後,被竊取的檔名與雜湊會寫進版控檔案。
加重因子:
baseline-meta.json與baseline.json在同一目錄、同一 trust boundary,兩者都被git ls-files追蹤baseline-meta.json零測試覆蓋regression-gate.sh有 4 處指引操作者去跑這支腳本Type
bug
Expected
pin-reference-model.sh對model施加與 #115 相同的驗證。直接重用scripts/lib/baseline-worklist.py(#116 已把驗證抽成獨立模組)或等價的共用通道——不要複製第三份 regex,那正是本 class 反覆出現的根因。
亦需考慮:
MODEL_DIR可由$1覆蓋(L23 的${1:-...}),該路徑同樣未驗證。Impact
scripts/pin-reference-model.shscripts/lib/baseline-worklist.py使其能驗baseline-meta.json的 shapebaseline-meta.json目前零覆蓋)誠實 severity:MEDIUM(同 #115——需惡意 PR 混入受版控檔案;read-only traversal 非 RCE),
但持久化寫回 repo 這點使影響面大於 #115。
Source: surfaced during /idd-verify PR #126 — Devil's Advocate,四個 leg 全體漏掉。
DA 實證逃逸並確認資料寫入 tracked 檔案。