| P1-01 |
S1-03 |
new-repo-init.sh 无幂等性 + 无基线锚点产物,后续无法证明仓是否合规初始化 |
| P1-02 |
S1-04 |
REPOS.yaml 申报时 gate 不调用 GitHub API 回查实际 visibility/existence |
| P1-03 |
S1-05 |
业务仓 AGENTS.md 中 agent 引用无 AR-2 跨仓校验(validate.py 只在 agent-registry 仓跑) |
| P1-04 |
S2-03 |
ADR status 流转(proposed→accepted)与 PR merge 无绑定 |
| P1-05 |
S2-04 |
C1 新增 archetype 时未强制同步更新 expected-state.json capabilities 白名单 |
| P1-06 |
S2-05 |
drift-check 9 段缺少"治理仓内部一致性校验"(schema ↔ GOVERNANCE.yaml ↔ validate.py 三方一致) |
| P1-07 |
S3-04 |
事件流存储类型/位置/append-only 保证/AR-5 拦截平台端强制执行均未定义 |
| P1-08 |
S3-05 |
6 项 handoff 动作的完成凭证仅靠 retrospective 自述,无每项的 signed hash 收集 |
| P1-09 |
S3-06 |
teams/*.yaml 的 status 变更/销毁标记写入权限未限定 governance-core 专用 |
| P1-10 |
S3-07 |
AR-5 no-force-push 仅保护 main 分支;feature 分支 force push 无人管 |
| P1-11 |
S4-03 |
依赖审批流程仅黑(forbidden)白(允许名单)两态,中间灰区 MIT/BSD 宽松 License 无人审 |
| P1-12 |
S4-04 |
testing.yaml 激活项无具体阈值(coverage≥75%? mutation≥60%? race?),CI gate 无法判定 pass/fail |
| P1-13 |
S4-05 |
squash 后 commit message 格式无 CI 校验,合入后脏消息进 main |
| P1-14 |
S4-06 |
CodeQL 扫描结果 dismiss 机制未锁 owner-only,cloudbrid-agent 理论可消告警 |
| P1-15 |
S4-07 |
template-service 默认仓设置 "Automatically delete head branches" 开关是否开启未知 |
| P1-16 |
A1 |
drift-check §7b 的"线上仓未申报"只做单向(REPOS→GitHub)不做双向差分(GitHub-REPOS) |
| P1-17 |
A3 |
REPOS.yaml exempt 语义与 expected-state.exclude_repos 语义不对齐 |
| P1-18 |
B1 |
C1 级 ruleset 变更的 drift-check-local 预检缺 ruleset 语义合法性校验 |
| P1-19 |
B5 |
agent status 从 proposed→approved 可自升,validate.py 不校验状态迁移权限 |
| P1-20 |
C1 |
ephemeral team.archive_to 指向的 persistent team 无存在性+type+status 校验 |
| P1-21 |
C2 |
handoff 数组只有"每项值是 6 枚举之一"校验,无"6 项必须全包含"完整性校验 |
| P1-22 |
C5 |
persistent team 被删/归档时,无反向引用保护检查 ephemeral 引用它 |
| P1-23 |
D1 |
App 权限形状变更的检测仅 drift-check 周检,无实时 webhook |
| P1-24 |
E2 |
破玻璃回填三件套(PR+ADR+drift issue comment)无自动化关联校验 |
| P1-25 |
E3 |
admin 唯一性漂移(§9)会导致所有依赖唯一 admin=owner 的规则归因混乱 |
| P1-26 |
F1 |
Actions 白名单(CI-2)只控来源允许,不控是否 pin commit hash(浮 tag 引用 action) |
| P1-27 |
G1 |
typescript when=frontend-isomorphic 的条件无自动化判定 + enforcement 级别未明 |
| P1-28 |
H3 |
T-10 mutation weekly 测试分数<60% 时无自动开 issue+指派责任人 |
| P1-29 |
第三轮 D1 |
builder 与 test-author 表面不同声明但 prompt 由同一人写,测试放水 |
| P1-30 |
第三轮 D2 |
ephemeral handoff 数组只声明 [artifacts-pr] 就可过 validate.py,故意不写 retrospective/adr-write |
| P1-31 |
第三轮 E2 |
agent/skill 引用无固定版本号(@latest / skill:xxx 不带 version) |
Cloudbird-Software 组织治理体系红队测试问题总报告(客观证据)
演练日期:2026-08-19
演练范围:三个治理仓(L0: .github + CI-Workflows;L1: agent-registry;L2: template-service 及业务仓)
演练轮次:3 轮(白盒正常流程 / 边界异常场景 / 红队压力渗透)
参与测试场景数:22 个主场景 + 55+ case
累计发现问题数:79 项(P0 级 22 项 / P1 级 31 项 / P2 级 16 项 / P3 级 10 项)
一、演练方法(客观事实)
二、问题分布总览
三、3 大结构性缺陷(跨类别叠加)
drift-check漂移检测的幂等逻辑(标题模糊搜索"治理漂移")、§8 直推正则(可伪造 PR 号结尾)、9 段检测对仓内容零校验——上述缺陷叠加后,攻击者可一次性使所有治理自动监控失明,后续任何攻击都永不被发现。Cloudbird-Software/*粗粒度放行内部 action——三层组合形成一条完整投毒通道:修改 CI-Workflows gate 实现 → 所有业务仓 gate 全绿但执行任意代码。四、P0 级问题(22 项)
P0-01:
gh repo create脱机零门禁,建仓流程完全失控flows.new_repo步骤 1gh repo create是本地命令,任何有组织写权限的成员都可创建任意模板、任意 visibility 的仓;模板选错、非 owner 创建、visibility 错配等只能在事后 REPOS.yaml 申报时被发现,此时仓已真实存在,已构成 GM-4 漂移。P0-02:CodeQL Default Setup 未自动启用 → 首次功能 PR 永久死锁
flows.new_repo步骤 5 + codeql-gate rulesetnew-repo-init.sh中也未包含启用步骤。业务仓首个功能 PR 的 required check 永远 pending,PR 无法合并。P0-03:C1 跨 L0+L1 双仓变更无原子性保证
flows.governance_changeC1 scopeP0-04:apply.sh 无 merge 后自动触发机制
governance/apply.sh+ governance-drift workflowP0-05:AR-8 族级独立(不同 model family)自动化校验缺失
validate.pyAR-8 校验分支P0-06:Ephemeral 团队销毁无自动触发 Workflow
flows.agent_team_lifecycle§4 + team schema AR-6P0-07:
verdict_by=mechanism:verifier机制完全未定义team.schema.yamlL46 + GOVERNANCE.yaml AR-9mechanism:verifier到底是什么没有任何定义——是 judge archetype agent?是 CI job?是 human reviewer?需要什么配置?输出什么验真凭证?全未定义。P0-08:CODEOWNERS
* @randypanding→ 所有业务 PR 全死锁* @randypanding(所有路径),加上 ruleset 中require_code_owner_review=true:任何 PR(业务代码一行变更/dependabot patch 升级/documentation typo)都必须唯一 owner @randypanding 审批。dependabot BP-4 auto-merge 的前提是 review requirement 被满足,但 dependabot PR 永远缺 owner approved comment → auto-merge 100% 死锁。P0-09:MOD-3 模块≤3000 行 = 定义不明 + 无拦截脚本
policy/languages.yamlMOD-3P0-10:agent-tools planned 状态仓已创建但所有检测全 skip
P0-11:C1 scope 漏列 policy/ 等高影响路径 → 重大变更可绕过治理
GOVERNANCE.yamlflows.governance_change.classes[].scope[GOVERNANCE.yaml, rulesets/, expected-state.json, standards/, models.yaml, decisions/],缺三个高影响路径:governance/policy/*.yaml(testing.yaml/languages.yaml);.github/CODEOWNERS和.github/settings.*;.github/workflows/*.yml的 gate 逻辑修改。P0-12:CODEOWNERS 改 owner → 可悄悄转移治理权
.github/CODEOWNERS+ C1 scope.github/CODEOWNERS,最后一行从* @randypanding改为* @Cloudbird-Software/xx-team,命中不到 C1 scope(见 P0-11),走普通 PR。PR 一旦 merge,新 CODEOWNERS 立即生效,之后所有治理仓 PR(包括 C1 级 GOVERNANCE.yaml 变更)都不再需要 randypanding。P0-13:verification.test_authors 引用 builder archetype = 可自证自
validate.py+ team schema verification 段verification.test_authors: [agent:my-builder@1.0.0]→ validate.py 通过 → builder 自己验证自己的代码 → verification 链失效。P0-14:§8 直推检测正则可伪造——破玻璃监控洞穿
drift-check.shL151select(.commit.message | test("[(]#[0-9]+[)]$") | not),意为"commit message 末尾不含(#数字)= 直推"。攻击者只需在 commit message 末尾手动加一个假 PR 号即可绕开(如fix: 后门植入 (#99999))——PR #99999 实际不存在、未被 merge,drift-check 不做二次校验。P0-15:Actions 白名单只控来源不控内部行为 → org 自有 action 投毒
expected-state.jsonactions_policy.patterns_allowed + CI-2Cloudbird-Software/*,意味着 org 下任何仓作为 action 被引用都被允许。但 CI-2 只检查 "uses" 的 action 路径是否在白名单,不检查该 action 内部实际运行了什么。run: curl ... | bash→ 发布新版本并移动 major tag → 所有引用@v1的业务仓自动执行恶意代码,CI/CD 环境被攻陷。P0-16:heavy_orm 禁止用字符串匹配 → gorm-auto-migrate 完全漏
policy/languages.yamlheavy_orm_forbidden + gate dep-review 子项go get gorm-auto-migrate),它是gorm.io/gorm库的一个使用模式(调用db.AutoMigrate(&Model{}))。gorm 引入完全正常通过,代码中写了db.AutoMigrate也无任何 CI gate 拦截。P0-17:T-08 flaky test 治理 = 仅有文档,无执行引擎
policy/testing.yamlT-08P0-18:triggered 测试(G-01~G-08)= 全部形同虚设
policy/testing.yamltriggered 段trigger=xxx字段(first_public_api/sql_layer_landed 等),但完全没有 trigger 引擎。谁来检测"第一次出现 public API 声明"?谁来检测"SQL 层第一次落地"?trigger 条件怎么激活?全是 declarative intent,没有 executable engine。P0-19:漂移检测幂等逻辑漏洞 → 假 issue 可永久淹没真实漂移
.github/workflows/governance-drift.ymlL36EXISTING=$(gh issue list --state open --search "in:title 治理漂移" --json number --jq 'length'),漏洞有三:搜索关键词"in:title 治理漂移"是模糊匹配,任何标题含这四个字的 issue 都会被当成"漂移 issue 已存在";不过滤 label/author/特定模板;默认分页 30 条,>30 个假 issue 时会漏真实漂移的精确匹配。P0-20:CI-Workflows v1 tag 可覆盖 → 全组织 gate 投毒通道
CI-Workflows@v1,v1 是浮动 tag。release-tags ruleset 禁止 tag 删除/force push/更新,但是 bypass_actors 中包含 OrganizationAdmin(always),admin(唯一 owner randypanding)可以 bypass ruleset:删除 v1 tag → 把 v1 tag 重新指到恶意 commit → 所有业务仓的 gate workflow 下次运行时跑的是恶意代码。P0-21:CodeQL 排除 .github 仓 → 治理仓脚本后门洞
rulesets/codeql-gate.jsonL7 repository_name.exclude = ["AI_Web_School", ".github"]governance/apply.sh(写 GitHub API 的 bash 脚本,用 org admin token 执行)、governance/drift-check.sh(读 GitHub API)、scripts/gh-app-token.sh(用 App 私钥换 token,掌握 AGENT_APP_SECRET)、scripts/new-repo-init.sh(初始化新仓)。这些全是高权限高价值攻击目标。curl | bash窃取 GH_TOKEN)→ CodeQL 不扫 .github 仓 → 不会扫出后门 → owner 下次执行 apply.sh 时 admin 级令牌被窃取。P0-22:治理仓三大核心仓无灾备 → 单点故障等于组织级灾难
五、P1 级问题(31 项)
六、P2 级问题(16 项)
七、P3 级问题(10 项)
八、三轮演练原始场景索引