Source snapshot: 97d7f0fae96dc04b7ddad56fc1db6a108ed662cc [SEC-CLEAN] · pre-push-clean v1.0 · 109处敏感信息已自动转乱码
161 lines
4.6 KiB
Markdown
161 lines
4.6 KiB
Markdown
---
|
||
belongs_to:
|
||
- "[[INDEX · 铸渊·协作指令|GitHub ↔ Notion 桥接协议]]"
|
||
---
|
||
# 🔍 铸渊指令|PAT 令牌审计 · 排查 guanghu-token 对应密钥 + 更新配置(ZY-PAT-AUDIT-2026-0324-001)
|
||
|
||
---
|
||
|
||
<aside>
|
||
🚨
|
||
|
||
**指令编号:ZY-PAT-AUDIT-2026-0324-001**
|
||
|
||
**签发人:** 霜砚(ICE-NTN-SY001)· 代 TCS-0002∞ 冰朔 签发
|
||
|
||
**签发时间:** 2026-03-24T15:25+08:00
|
||
|
||
**优先级:** 🔴 P0 · 安全事件 · 令牌泄露应急响应
|
||
|
||
**关联仓库:** [https://github.com/qinfendebingshuo/guanghulab](https://github.com/qinfendebingshuo/guanghulab)
|
||
|
||
**版权锚点:** 国作登字-2026-A-00037559 · TCS-0002∞ 冰朔
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 🎯 事件背景
|
||
|
||
<aside>
|
||
⚠️
|
||
|
||
**安全事件摘要:**
|
||
|
||
主控冰朔此前将一个名为 **`guanghu-token`** 的 GitHub Personal Access Token(PAT)通过微信发送给协作开发者 Awen,用于开发者子仓库桥接配置。该令牌在传输过程中发生泄露。
|
||
|
||
**已完成的应急操作:**
|
||
|
||
- ✅ 冰朔已在 GitHub → Developer settings → Personal access tokens 页面对 `guanghu-token` 执行了 **Regenerate**(重新生成)
|
||
- ✅ 旧令牌值已自动失效,泄露的值无法再使用
|
||
|
||
**当前问题:**
|
||
|
||
冰朔不确定仓库中哪个 GitHub Secret 使用了这个 `guanghu-token` 的值。由于已经 Regenerate,如果仓库 Secret 中存了旧值,那相关 Workflow 会全部鉴权失败。
|
||
|
||
**铸渊需要排查并修复。**
|
||
|
||
</aside>
|
||
|
||
---
|
||
|
||
## 📋 铸渊执行任务
|
||
|
||
### Phase 1 · 排查 `guanghu-token` 对应的 Secret
|
||
|
||
**思路:** `guanghu-token` 是用于「开发者子仓库桥接」的。按照这个用途,排查以下路径:
|
||
|
||
#### 1.1 搜索所有 Workflow 中引用的 Secret 名称
|
||
|
||
```bash
|
||
# 列出所有 workflow 中引用的 secrets
|
||
grep -rn "secrets\." .github/workflows/ --include="*.yml" --include="*.yaml" | grep -v "GDRIVE" | sort -u
|
||
```
|
||
|
||
**重点关注以下 Secret 名称(可能就是 guanghu-token 对应的):**
|
||
|
||
- `MAIN_REPO_TOKEN`
|
||
- `PAT_TOKEN`
|
||
- `GH_PAT`
|
||
- `GH_TOKEN`
|
||
- `REPO_ACCESS_TOKEN`
|
||
- `BRIDGE_TOKEN`
|
||
- `SUBMODULE_TOKEN`
|
||
- 或任何与「子仓库桥接」「跨仓库访问」「checkout 其他仓库」相关的 Secret
|
||
|
||
#### 1.2 分析用途
|
||
|
||
找到可疑的 Secret 后,看它在 Workflow 中怎么用的:
|
||
|
||
- 如果用于 `actions/checkout` 的 `token` 参数 → 这就是跨仓库访问令牌
|
||
- 如果用于 `git push` / `git clone` 其他仓库 → 这就是桥接令牌
|
||
- 如果用于 GitHub API 调用 → 可能也是
|
||
|
||
#### 1.3 确认结果
|
||
|
||
找到后,将结果写入回执区:
|
||
|
||
- Secret 名称是什么
|
||
- 在哪些 Workflow 文件中被引用
|
||
- 具体用途是什么
|
||
|
||
### Phase 2 · 通知主控更新 Secret
|
||
|
||
<aside>
|
||
👤
|
||
|
||
**铸渊找到对应的 Secret 名称后,在回执区写清楚,冰朔会去手动更新 Secret 的值。**
|
||
|
||
铸渊无法直接读取或修改 GitHub Secrets 的值,这一步必须人类操作。
|
||
|
||
</aside>
|
||
|
||
铸渊需要告诉冰朔:
|
||
|
||
1. **Secret 名称**:比如 `MAIN_REPO_TOKEN`
|
||
2. **在哪里更新**:仓库 → Settings → Secrets and variables → Actions → 找到这个 Secret → 点编辑 → 粘贴新令牌值
|
||
3. **如何验证**:更新后手动触发一个使用该 Secret 的 Workflow,看是否正常
|
||
|
||
### Phase 3 · 验证修复
|
||
|
||
冰朔更新 Secret 后:
|
||
|
||
1. 手动触发一个引用该 Secret 的 Workflow
|
||
2. 确认 Workflow 能正常完成(不报 401/403 鉴权错误)
|
||
3. 如果仍然失败,检查是否有多个 Secret 使用了同一个令牌
|
||
|
||
### Phase 4 · 安全扫描
|
||
|
||
顺便做一次全仓库安全扫描:
|
||
|
||
```bash
|
||
# 检查是否有硬编码的令牌(ghp_ 或 github_pat_ 开头)
|
||
grep -rn "ghp_" . --include="*.js" --include="*.yml" --include="*.json" --include="*.md"
|
||
grep -rn "github_pat_" . --include="*.js" --include="*.yml" --include="*.json" --include="*.md"
|
||
```
|
||
|
||
- ❌ 不应有任何硬编码令牌
|
||
- ✅ 所有令牌均应通过 `secrets.*` 引用
|
||
|
||
---
|
||
|
||
## 📝 执行回执区
|
||
|
||
| **Phase** | **状态** | **完成时间** | **结果** |
|
||
| --- | --- | --- | --- |
|
||
| Phase 1 · 排查对应 Secret | ⏳ 待执行 | — | — |
|
||
| Phase 2 · 通知主控 | ⏳ 待执行 | — | — |
|
||
| Phase 3 · 验证修复 | ⏳ 待人类操作后执行 | — | — |
|
||
| Phase 4 · 安全扫描 | ⏳ 待执行 | — | — |
|
||
|
||
---
|
||
|
||
## 👤 人类手动操作区
|
||
|
||
<aside>
|
||
👤
|
||
|
||
**铸渊排查完成后,冰朔需要做:**
|
||
|
||
</aside>
|
||
|
||
1. ⏳ **更新 Secret 值**:去仓库密钥页面,找到铸渊排查出的 Secret 名称,把新生成的 `guanghu-token` 令牌值粘贴进去
|
||
2. ⏳ **确认 Workflow 正常**:铸渊会触发验证,冰朔确认结果
|
||
|
||
---
|
||
|
||
🖋️ 霜砚 · PER-SY001
|
||
|
||
🧊 代 TCS-0002∞ 冰朔 签发
|
||
|
||
📅 2026-03-24T15:25+08:00 |