Skip to content

[SEC][BUG][P1] 上游同步在同一 job 里既跑不可信上游代码又持有推送凭据 #899

Description

@jinjunnn

缺陷

上游同步流水线在同一个 job 里既执行不可信的上游代码,又持有仓库推送凭据。凭据被写进 .git/config 并在整个 job 期间存在。这条流水线每天 06:00 UTC 自动跑。

实读证据

  • .github/workflows/sync-upstream.yml:18-19 —— workflow 顶层 permissions: contents: write,且全文只有一个 job(sync,line 26)。不存在只读 candidate 信任域。
  • .github/workflows/sync-upstream.yml:44 —— token: ${{ secrets.SYNC_TOKEN || github.token }},且没有 persist-credentials: false。全仓只有 docs-locale-sync.yml:21 与 nix-hashes.yml:100 写了这一行,说明这个写法在本仓是已知的、只是这里没用。
  • .github/workflows/sync-upstream.yml:14-16 —— cron 每天 06:00 UTC,现役。

修法约束

拆成两个信任域:

  1. candidate 阶段 —— 只读、无推送凭据。跑不可信上游代码,产出不可变的 diff/digest 作为 artifact。
  2. 推送阶段 —— 独立特权 workflow,用短时 token,在全部 guard 与 smoke 通过之后才推。

actions/checkout 一律带 persist-credentials: false。

边界

.github/workflows/sync-upstream.yml;alpha-owned 路径守卫 .github/workflows/alpha-ci.yml 的 upstream-guard job(line 104-210)。

Out of scope

  • 不扩大 upstream-guard 的变化类型覆盖(A/M/D/R 全覆盖是 alpha-code#227 的另一格,该票仍 OPEN)。
  • 不改同步的频率或上游选取策略。

退出条件

PR 合并 + 一次真实同步跑通 + candidate job 的 token 权限经 gh api 核实为只读。


出处:2026-08-10 W0 存量普查第二轮,勘破 alpha-code#227 时发现。#227 保持 OPEN(它还有 A/M/D/R 覆盖那一格),本票只切分权这一格。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:securitySecurity or access controlprio:P1High-value near-term deliverytype:bugSomething is incorrect or regressed

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions