# TravisCI 安全 {{#include ../../banners/hacktricks-training.md}} ## 什么是 TravisCI **Travis CI** 是一个 **托管** 或 **本地** 的 **持续集成** 服务,用于构建和测试托管在多个 **不同 git 平台** 上的软件项目。 {{#ref}} basic-travisci-information.md {{#endref}} ## 攻击 ### 触发器 要发起攻击,您首先需要知道如何触发构建。默认情况下,TravisCI 会在 **推送和拉取请求** 时 **触发构建**: ![](<../../images/image (145).png>) #### 定时任务 如果您可以访问该 web 应用程序,您可以 **设置定时任务来运行构建**,这对于持久性或触发构建可能很有用: ![](<../../images/image (243).png>) > [!NOTE] > 根据 [this](https://github.com/travis-ci/travis-ci/issues/9162),似乎无法在 `.travis.yml` 中设置定时任务。 ### 第三方 PR TravisCI 默认情况下禁用与来自第三方的 PR 共享环境变量,但有人可能会启用它,然后您可以创建 PR 到该仓库并提取机密: ![](<../../images/image (208).png>) ### 转储机密 如 [**基本信息**](basic-travisci-information.md) 页面所述,有两种类型的机密。**环境变量机密**(在网页上列出)和 **自定义加密机密**,这些机密存储在 `.travis.yml` 文件中,采用 base64 编码(请注意,两个加密存储的最终都会作为环境变量出现在最终机器中)。 - 要 **枚举配置为环境变量的机密**,请转到 **项目** 的 **设置** 并检查列表。但是,请注意,在触发构建时,此处设置的所有项目环境变量都会出现。 - 要枚举 **自定义加密机密**,您可以做的最好的是 **检查 `.travis.yml` 文件**。 - 要 **枚举加密文件**,您可以检查仓库中的 **`.enc` 文件**,查找配置文件中类似于 `openssl aes-256-cbc -K $encrypted_355e94ba1091_key -iv $encrypted_355e94ba1091_iv -in super_secret.txt.enc -out super_secret.txt -d` 的行,或在 **环境变量** 中查找 **加密的 iv 和密钥**,例如: ![](<../../images/image (81).png>) ### TODO: - 示例构建在 Windows/Mac/Linux 上运行反向 shell - 示例构建在日志中泄露环境变量的 base64 编码 ### TravisCI 企业版 如果攻击者进入一个使用 **TravisCI 企业版** 的环境(有关这是什么的更多信息,请参见 [**基本信息**](basic-travisci-information.md#travisci-enterprise)),他将能够 **在 Worker 中触发构建**。这意味着攻击者将能够从中横向移动到该服务器,从而能够: - 逃离到主机? - 破坏 kubernetes? - 破坏同一网络中运行的其他机器? - 破坏新的云凭证? ## 参考 - [https://docs.travis-ci.com/user/encrypting-files/](https://docs.travis-ci.com/user/encrypting-files/) - [https://docs.travis-ci.com/user/best-practices-security](https://docs.travis-ci.com/user/best-practices-security) {{#include ../../banners/hacktricks-training.md}}