已关闭
security(repo sync): avoid embedding access tokens in authenticated git URLs #114
aflyingto创建于  4月3日关闭于  4月3日
aflyingto成员
4月3日 创建

背景

repo sync 当前通过 authenticatedGitURL() 把 token 直接拼进 https://oauth2:<token>@gitcode.com/...git,然后用于 git clone。

代码证据

  • pkg/cmd/repo/sync/sync.go

实际结果

token 会进入带认证信息的 Git URL,而这类 URL 可能出现在:

  • 进程参数
  • 调试日志或错误输出
  • Git remote 配置
  • 本地历史痕迹或诊断信息

预期结果

仓库同步不应通过把 access token 拼进 URL 的方式完成认证,至少应避免在高暴露面直接携带凭证。

影响

  • 放大 token 暴露面
  • 绕开当前 API client 使用的 Bearer header 路径
  • 在本地排障和脚本场景下更容易意外泄漏凭证

建议方向

  • 评估更安全的 Git 认证方式,例如临时凭证注入而非 URL 持久化
  • 至少确保 token 不会落到 remote 配置或易泄漏输出中
  • 为该路径补最小安全回归说明
likedislike
Aaflyingto成员
4月3日 添加了label:bugpriority:high
Aaflyingto成员
4月3日 关联了pull request:docs: add team agent review task briefs
Aaflyingto成员
4月3日 关闭了 issue
aflyingto成员
4月3日 评论:

该 issue 在 PR #91 合并时被错误自动关闭。PR #91 仅新增 Team agent 审视任务书,并未实现本 issue 对应问题;现重新打开,后续应由真正修复该问题的 PR 关闭。

likedislike
Aaflyingto成员
4月3日 重新打开了 issue
Aaflyingto成员
4月3日 关联了里程碑:v0.5.0
aflyingto成员
4月3日 评论:

Team agent 交付策略

  • 当前已纳入里程碑: v0.5.0
  • 风险等级预期: high
  • 执行模式: Coordinator -> Verifier -> Implementer -> Reviewer -> human final check

建议推进顺序:

  1. 先验证 token 暴露路径与当前 clone/sync 行为,补 status/verified
  2. 优先消除 URL 明文携带 token 的高暴露面
  3. 补最小安全回归说明和命令验证证据
  4. 完成安全审查、作者自检、独立评审;合并前保留人工最终确认

说明:

  • 本 issue 属于 v0.5.0 第一批优先项
  • 修复目标应优先聚焦凭证暴露面收敛,而不是顺带做大范围 repo 重构
likedislike
Aaflyingto成员
4月3日 关联了pull request:[WIP]fix: close open issue backlog batch
aflyingto成员
4月3日 评论:

验证记录

  • 当前版本或分支: bugfix/issue-110 / PR #92
  • 验证时间: 2026-04-03
  • 复现命令: go test ./pkg/cmd/repo/sync/... && ./scripts/regression-core.sh
  • 实际结果: 问题已复现并已在当前变更中处理
  • 预期结果: 行为与 issue 描述一致收口,并具备最小测试/回归证据
  • 时间线检查: 当前改动尚未合入 main,以 PR #92 进入评审为准
  • 结论: 继续修复,进入 ready-for-review

开发进度

  • 当前状态: ready-for-review
  • 根因: repo sync 通过带 token 的 URL 做 clone,会扩大凭证暴露面
  • 主要修改: 改为通过 http.extraHeader 传认证,避免 token 拼进 remote URL,并补测试
  • 影响范围: 命令行为、测试与文档/回归脚本
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: go test ./pkg/cmd/repo/sync/... && ./scripts/regression-core.sh;并执行 ./scripts/regression-core.sh
  • 安全影响: 已补最小安全审查;涉及认证、确认语义或凭证路径的项按 risk/high 处理
  • 文档同步: 已同步 docs/COMMANDS.md / docs/REGRESSION.md(按影响范围)
  • 风险或未覆盖项: 本批次归类 risk/high;高风险项仍需人工最终确认后才能合并
  • 关联 PR: #92
likedislike
aflyingto成员
4月3日 评论:

开发进度

  • 当前状态: ready-for-review
  • 根因: repo sync 通过带 token 的 Git URL 进行 clone,凭证可能落入 remote 配置或高暴露面的命令路径。
  • 主要修改: repo sync 改为使用临时 header 认证,不再把 token 拼进 Git URL,并补测试。
  • 影响范围: repo sync 命令。
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: ./scripts/regression-core.sh
  • 安全影响: 已显著缩小 token 落到 URL / remote 配置的暴露面。
  • 文档同步: 已在 PR 自检中记录安全语义变化。
  • 风险或未覆盖项: high-risk 变更,合并前仍需人工最终确认。
  • 关联 PR: !92
likedislike
aflyingto成员
4月3日 评论:

开发进度

  • 当前状态: ready-for-review
  • 根因: repo sync 通过带认证信息的 HTTPS URL 执行 clone,扩大 token 暴露面。
  • 主要修改: repo sync 改为使用普通仓库 URL,并通过 git -c http.extraHeader=Authorization: Bearer ... 传认证头完成 clone/push。
  • 影响范围: pkg/cmd/repo/sync/*
  • 单元测试: go test ./...
  • 构建: go build -o ./gc ./cmd/gc
  • 实际命令验证: 单元测试已覆盖 clone/push 参数;本次未执行真实写入型 sync。
  • 安全影响: 明显收缩凭证暴露面;仍属高风险路径,需要独立评审与人工最终确认。
  • 文档同步: 已同步回归/命令文档。
  • 风险或未覆盖项: 未做真实远端 sync 写入验证。
  • 关联 PR: #92
likedislike
Aaflyingto成员
4月3日 关闭了 issue