SuperAPI AI 工具集

concourse-tactics

安全与审计

查看项目

更新于 10-16 12:11

技能介绍

Concourse CI 是以容器为核心的 CI/CD 系统:每个 Task 运行在独立容器中,Pipeline 配置即代码,所有凭据通过 Credential Manager 注入。一旦获取到 Fly CLI 凭据或 API Token,攻击者可以窃取 Pipeline 变量中的全部 Secrets、篡改 Job 注入恶意 Task、从 Resource 配置中提取 Git/S3/Docker Registry 凭据、劫持 Build 日志和构建产物,并通过 Worker 节点的 Garden 容器接口尝试容器逃逸。

一、用途与适用场景 本技能用于对 Concourse CI 实例进行渗透测试与利用。适用时机包括:发现目标运行 Concourse CI 实例;获取 Fly CLI 凭据或 API Token;需要从 Concourse Pipeline 窃取凭据或注入恶意任务。

二、主要能力

  1. 实例发现与未授权访问:识别 Web UI / ATC API(8080 / 443)、TSA(2222)、Garden(7777)、Baggageclaim(7788)等组件端口与指纹;通过 /api/v1/info、/api/v1/pipelines、/api/v1/teams、/api/v1/builds 等进行未授权 API 枚举;测试默认凭据并使用已获取的 Bearer Token。
  2. Pipeline 变量与 Secrets 窃取:枚举 Pipeline 配置(fly get-pipeline、API config 接口),获取 Team 级别与 Pipeline 级别变量,识别 aws_access_key_id、private_key、ssh_key、api_token、password 等高价值变量;针对 Vault、CredHub、AWS SSM、K8s Secrets 等 Credential Manager 后端给出路径模板与利用方式。
  3. Resource 凭据提取与 Job 篡改:从 git、s3、docker-image/registry-image、github-release、pool、cf 等 Resource 类型的 source 中提取凭据;在具备 set-pipeline 权限时导出配置、注入恶意 task、重新设置并触发 Job。
  4. Build 日志窃取与 Task 脚本注入:列出与实时查看 Build 日志、批量获取 Build 事件流;修改 Pipeline 引用的 Git 仓库中 Task 文件,在 run.path / run.args 注入命令;使用 fly intercept 进入运行中容器读取环境变量、访问挂载文件、探测内网。
  5. Worker 利用与容器逃逸:列出 Worker 及其详情,访问 Garden 容器管理接口(7777)执行容器操作;针对 privileged Task、Docker Socket 挂载、Garden API 可达、宿主机 PID namespace 等逃逸条件给出检查与利用方向;通过定时触发的隐蔽 Pipeline 实现后门持久化。

三、使用方式 资料以分阶段方法组织:Phase 1 实例发现与未授权访问、Phase 2 Pipeline 变量与 Secrets 窃取、Phase 3 Resource 凭据提取与 Job 篡改、Phase 4 Build 日志窃取与 Task 脚本注入、Phase 5 Worker 利用与容器逃逸。每阶段给出对应的 fly CLI 命令、curl API 调用、解析示例。识别到具体攻击路径后,加载 references/attack-techniques.md 获取完整命令、注入模板与逃逸命令。资料同时提供决策树与工具速查表,覆盖 fly CLI、curl + API、.flyrc、jq/python3 解析 Pipeline YAML、Garden API 等工具的用途与关键命令。

四、限制与注意事项 Concourse ATC 会记录所有 API 调用和 Fly CLI 操作,set-pipeline、trigger-job、intercept 均会留痕;Fly CLI Token 默认 24 小时过期,API Token 有效期取决于 auth provider 配置;Concourse 以 Team 为隔离边界,不同 Team 的 Pipeline、变量、Worker 互不可见,但 main Team 通常拥有全局管理权限;若配置了 Vault/CredHub,Pipeline 变量 API 可能返回 redacted,需直接攻击后端存储;Task 容器在 Build 完成后销毁,持久化需依赖 Pipeline 定时触发或后门 Resource;Worker 之间无直接通信,但共享同一 Garden 实例的容器可能存在侧信道。