Merge remote-tracking branch 'gitea/main' into codex/security-supply-chain-contracts-20260512

This commit is contained in:
Your Name
2026-05-13 20:00:31 +08:00
3 changed files with 55 additions and 64 deletions

View File

@@ -8453,17 +8453,17 @@ by_verdict:
- 新觀察CD job log 會在 step env 區塊顯示 188 deploy key 內容。未在本文件記錄任何 secret 值,但必須列為下一個 P0輪換 188 deploy key並改造 workflow避免 multiline secret 以 env 形式出現在 Gitea Actions logs。
- 目前整體進度更新:約 84%。
### 2026-05-13 — T14d/P0Gitea CD 188 deploy key log exposure 止血(workflow pushed
### 2026-05-13 — T14d/P0Gitea CD 188 deploy key log exposure 止血(superseded by T14e
**觸發**
- T14c CD log 觀察到 `Sync Ops Scripts to 188` step 會在 Gitea Actions 的 step env 區塊顯示 188 deploy key 內容。
- 未在 repo 或本文件保存任何 secret 值;但已經出現在 CI log必須視為已暴露。
**止血變更**
**止血變更(短暫中繼,已由 T14e 取代)**
- `.gitea/workflows/cd.yaml` 移除 `SSH_KEY_188` step-level env。
- 改在 shell 內直接寫入 `~/.ssh/deploy_key_188`,避免 multiline deploy key 以 env 形式進入 Gitea Actions log 的 env 區塊
- 早期中繼版曾嘗試改成 shell 內寫 keyT14e 已判定仍不適合作為最終安全路徑,並改為整個 188 ops sync step 暫停,不再從 CD 讀取 multiline deploy key
**verification**
@@ -8475,5 +8475,42 @@ yaml ok
判讀:
- 這是 workflow-level 止血,不等於完成安全事件處置。
- 下一步仍需輪換 188 deploy key清理/限制歷史 job log 可見性,並用一次受控 workflow_dispatch 確認新 workflow 不再暴露 secret。
- 下一步仍需輪換 188 deploy key清理/限制歷史 job log 可見性,並用一次受控 workflow_dispatch 確認新 workflow 不再暴露 secret;這部分由 T14e 接手
- 目前整體進度更新:約 85%。
### 2026-05-13 — T14e/P0188 deploy key 已輪換CD 暫停讀取該 secretawaiting workflow dispatch verification
**完成事項**
- 產生新的 188 CD deploy ed25519 keypairpublic fingerprint`SHA256:68UY6RnOJTEH4KQNGZJbMFWTUrdpFE0onPd95RDQEBI`)。
- 新 public key 已加入 `ollama@192.168.0.188:~/.ssh/authorized_keys`comment`gitea-cd-deploy-188-20260513`
- 使用新 private key SSH 測試成功:
```text
rotated_key_ok
ollama
ollama
```
- Gitea Actions secret `DEPLOY_SSH_KEY_188` 已更新API 回傳:
```text
secret_update_status=204
```
- 188 上舊 public key comment `gitea-cd-deploy-188` 已移除;目前只保留新的 `gitea-cd-deploy-188-20260513`
- `.gitea/workflows/cd.yaml``Sync Ops Scripts to 188` step 已暫停,不再讀取 `DEPLOY_SSH_KEY_188`,直到改成 file-secret 或 Ansible-controlled channel。
**verification**
```text
ruby -e 'require "yaml"; YAML.load_file(".gitea/workflows/cd.yaml"); puts "yaml ok"'
yaml ok
```
判讀:
- 已暴露的舊 188 deploy key 在 188 host 端失效。
- Gitea secret 已換成新 key但 CD 暫時不使用它,避免再次透過 Gitea Actions log 暴露 multiline secret。
- 下一步:推版後用受控 `workflow_dispatch` 跑 CD確認 `Sync Ops Scripts to 188` 被 skip且 job log 不再出現 `SSH_KEY_188` / `DEPLOY_SSH_KEY_188` env 內容。
- 目前整體進度更新:約 86%。

View File

@@ -2058,10 +2058,16 @@ Phase 6 完成後
**T14d/P0 Gitea CD 188 deploy key log exposure stopgap2026-05-13 台北)**
- 觸發T14c CD log 觀察到 `Sync Ops Scripts to 188` step 以 step-level env 傳入 multiline 188 deploy keyGitea Actions 會在 job log 的 env 區塊顯示內容。未在 repo / docs 保存任何 secret 值,但應視為已暴露。
- 止血:`.gitea/workflows/cd.yaml` 移除 `SSH_KEY_188` step env,改在 shell 內直接寫入 `~/.ssh/deploy_key_188`,避免 key 以 env 形式進入 Actions log
- 止血:`.gitea/workflows/cd.yaml` 移除 `SSH_KEY_188` step env。早期中繼版曾嘗試改成 shell 內寫 keyT14e 已判定仍不適合作為最終安全路徑,並改為整個 188 ops sync step 暫停,不再從 CD 讀取 multiline deploy key
- 驗證:`ruby -e 'require "yaml"; YAML.load_file(".gitea/workflows/cd.yaml"); puts "yaml ok"'` 通過。
- 邊界:這不是完整安全事件處置;仍需輪換 188 deploy key、清理/限制歷史 job log 可見性,並以受控 `workflow_dispatch` 驗證新 workflow 不再暴露 secret。
**T14e/P0 188 deploy key rotated + CD secret path disabled2026-05-13 台北)**
- 新 188 CD deploy ed25519 keypair 已產生public fingerprint`SHA256:68UY6RnOJTEH4KQNGZJbMFWTUrdpFE0onPd95RDQEBI`public key 已加入 `ollama@192.168.0.188:~/.ssh/authorized_keys`comment `gitea-cd-deploy-188-20260513`
- Gitea Actions secret `DEPLOY_SSH_KEY_188` 已更新API 回傳 `204`188 上舊 public key comment `gitea-cd-deploy-188` 已移除,新 key SSH 測試成功。
- `.gitea/workflows/cd.yaml``Sync Ops Scripts to 188` step 已改為 `if: ${{ false }}`CD 暫時不讀取該 secret避免再次透過 Actions log 暴露 multiline private key。
- 邊界:仍需受控 `workflow_dispatch` 驗證 step skip 與 log hygiene188 ops scripts 自動同步需改成 file-secret 或 Ansible-controlled channel 後再恢復。
---
### 2026-04-20 晚 (台北) — C1-C4 全流程串接 — Playbook 鏈路保護commit de2d34d