GitHub Actions 流水线枚举与攻击工具
[!WARNING]
此仓库已弃用并归档
Gato 已被 Trajan 取代,后者是 Praetorian 的多平台 CI/CD 漏洞检测与攻击自动化工具。Trajan 将 GitHub Actions(Gato)和 GitLab(Glato)的 CI/CD 攻击能力整合到一个持续维护的项目中。
请迁移至 Trajan: https://github.com/praetorian-inc/trajan
此仓库将不再进行任何更新、错误修复或安全补丁。
Gato,即 GitHub 攻击工具包,是一款枚举与攻击工具,使蓝队成员和攻击性安全从业者能够识别并利用 GitHub 组织内公共及私有仓库中的管道漏洞。
该工具具备后利用功能,可利用被攻陷的个人访问令牌,此外还提供枚举功能,用于识别中毒管道执行漏洞和针对公共仓库的 Actions 工件密钥。
GitHub 建议自托管运行器仅用于私有仓库,然而仍有成千上万个组织在使用自托管运行器。默认配置往往存在漏洞,Gato 通过结合工作流文件分析和运行日志分析,能够大规模识别潜在易受攻击的仓库。
Gato 1.7 版本引入了 Actions 工件密钥扫描器。
Actions 工件密钥扫描器枚举 GitHub Actions 工作流工件 以查找密钥。Praetorian 的研究人员已利用该扫描器在多个知名开源项目中发现了严重漏洞。这些漏洞的详细信息将在披露流程完成后发布。此项工作最初受 Palo Alto Networks 研究的启发。
Actions 工件密钥扫描器执行以下操作:
NoseyParker 必须安装在运行 Actions 工件密钥扫描器的系统的 $PATH 中。
公共工作流工件中的密钥可能包含大量误报。默认情况下,Actions 工件密钥扫描器会排除与常见误报关联的规则和结果。若需包含所有密钥扫描结果,可以使用 --include_all_artifact_secrets 标志。
以下是一个示例命令,对一组 GitHub 组织运行 Actions 工件密钥扫描器,禁用自托管运行器枚举,包含所有工件密钥结果,并输出为 JSON 文件。
gato e --enum_wf_artifacts --include_all_artifact_secrets --skip_sh_runner_enum -O testorgs.txt -oJ testorgoutput.json
默认情况下,Actions 工件密钥扫描器为减少在单个仓库上的耗时,施加以下限制:
这些限制经过优化,使得 Actions 工件密钥扫描器可在 48 小时内扫描前 200 个 GitHub 组织。如需修改这些限制,可以在 gato/enumerate/repository.py 的 scan_wf_artifacts() 函数中进行更新。
Gato 支持 OS X 和 Linux,要求至少 Python 3.7。
安装该工具,只需克隆仓库并使用 pip install 即可。建议在虚拟环境中执行。
git clone https://github.com/praetorian-inc/gato
cd gato
python3 -m venv venv
source venv/bin/activate
pip install .
Gato 还要求系统中安装 git 2.27 及以上版本,并将其添加到 PATH。要运行 Fork PR 攻击模块,还需安装 sed 并将其添加到系统路径。
我们维护了一个开发分支,其中包含尚未合并到主分支的新 Gato 功能。使用该分支遇到 bug 的几率会增加,但我们仍在 dev 分支上运行集成测试套件,因此不会存在 明显 的 bug。
如果你想使用 dev 分支,只需在运行 pip install 之前检出该分支即可!
如果在特定用例中遇到任何 bug,欢迎提出 issue!
安装工具后,可以通过运行 gato 或 praetorian-gato 启动。
建议使用 gato -h 查看基础工具的参数,并使用以下命令查看各模块的参数:
gato search -hgato enum -hgato attack -h该工具需要 GitHub 经典令牌或 App 安装令牌才能工作。要创建令牌,请登录 GitHub 并前往 GitHub Developer Settings,选择 Generate New Token,然后选择 Generate new token (classic)。
创建令牌后,在 shell 中执行 export GH_TOKEN=<YOUR_CREATED_TOKEN> 设置 GH_TOKEN 环境变量。或者将令牌存储在安全的密码管理器中,待应用提示时输入。
如果创建 GitHub App 安装令牌,该 App 至少需要 Actions: read 和 Contents: read 权限才能执行枚举模块。
有关故障排除和更多详细信息(例如开发者模式安装或运行单元测试),请参阅 wiki。
请参阅 wiki 获取详细文档,以及工具各模块的 OpSec 注意事项!
如果你认为发现了软件中的 bug,请提交一个 issue,内容包含工具的输出以及你尝试进行的操作。
如果你不确定该行为是否为 bug,请使用讨论区!
欢迎贡献!请在开发新功能前 阅读 我们的设计方法和编码规范。
此外,如果你提议对工具进行重大更改,请 创建一个 issue 来讨论更改的动机。
Gato 采用 Apache License, Version 2.0 许可。
Copyright 2023 Praetorian Security, Inc
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.