AWS Codebuild - Token Leakage
恢复 Github/Bitbucket 配置的 Tokens
首先,检查是否有任何配置的源凭证可以泄露:
通过 Docker 镜像
如果你发现账户中设置了对例如 Github 的认证,你可以通过让 Codebuild 使用特定的 Docker 镜像 来运行项目构建,从而泄露该访问(GH token 或 OAuth token)。
为此,你可以创建一个新的 Codebuild 项目或更改现有项目的环境以设置Docker 镜像。
你可以使用的 Docker 镜像是 https://github.com/carlospolop/docker-mitm。这是一个非常基础的 Docker 镜像,它将设置环境变量 https_proxy
、http_proxy
和 SSL_CERT_FILE
。这将允许你拦截主机中大部分的流量,主机由 https_proxy
和 http_proxy
指定,并信任 SSL_CERT_FILE
中指定的 SSL 证书。
创建并上传你自己的 Docker MitM 镜像
按照仓库的说明设置你的代理 IP 地址和 SSL 证书,并构建 Docker 镜像。
不要设置
http_proxy
以避免拦截到元数据端点的请求。你可以使用
ngrok
,例如ngrok tcp 4444
,将代理设置到你的主机。一旦你构建了 Docker 镜像,将其上传到公共仓库(Dockerhub, ECR...)。
设置环境
创建一个新的 Codebuild 项目或修改现有项目的环境。
将项目设置为使用之前生成的 Docker 镜像。
在你的主机上设置 MitM 代理
如 Github 仓库中所示,你可以使用类似的东西:
mitmproxy 版本使用的是 9.0.1,据报告在版本 10 中可能无法工作。
运行构建并捕获凭证
你可以在 Authorization 头中看到 token:
这也可以通过 aws cli 完成,类似于
通过 HTTP 协议
AWS 在 2023 年 2 月 20 日那周的某个时间(我认为是星期五)修正了这个漏洞。所以攻击者不能再滥用了 :)
具有 CodeBuild 高级权限的攻击者可以泄露配置的 Github/Bitbucket 令牌,或者如果权限是通过 OAuth 配置的,则可以泄露 用于访问代码的临时 OAuth 令牌。
攻击者可以将环境变量 http_proxy 和 https_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 中的基本示例
最后,点击 Build the project,凭证 将以 明文 (base64) 形式发送到 mitm 端口:
现在攻击者将能够从他的机器上使用该 token,列出它拥有的所有权限,并且比直接使用 CodeBuild 服务更容易滥用。
Last updated