AWS - Lambda Privesc
lambda
Περισσότερες πληροφορίες σχετικά με το lambda:
AWS - Lambda Enumiam:PassRole
, lambda:CreateFunction
, (lambda:InvokeFunction
| lambda:InvokeFunctionUrl
)
iam:PassRole
, lambda:CreateFunction
, (lambda:InvokeFunction
| lambda:InvokeFunctionUrl
)Οι χρήστες με τα δικαιώματα iam:PassRole
, lambda:CreateFunction
, και lambda:InvokeFunction
μπορούν να εξελίξουν τα προνόμιά τους.
Μπορούν να δημιουργήσουν μια νέα λειτουργία Lambda και να την αναθέσουν σε ένα υπάρχον IAM ρόλο, χορηγώντας στη λειτουργία τα δικαιώματα που σχετίζονται με αυτόν τον ρόλο. Ο χρήστης μπορεί στη συνέχεια να γράψει και να μεταφορτώσει κώδικα σε αυτήν τη λειτουργία Lambda (με ένα αντίστροφο κέλυφος για παράδειγμα).
Μόλις η λειτουργία είναι εγκατεστημένη, ο χρήστης μπορεί να ενεργοποιήσει την εκτέλεσή της και τις επιθυμητές ενέργειες καλϋπτοντας τη λειτουργία Lambda μέσω του API του AWS. Με αυτήν την προσέγγιση, ο χρήστης μπορεί αποτελεσματικά να εκτελέσει εργασίες έμμεσα μέσω της λειτουργίας Lambda, λειτουργώντας με το επίπεδο πρόσβασης που χορηγείται στον IAM ρόλο που τη συνοδεύει.\
Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό για να πάρει ένα αντίστροφο κέλυφος και να κλέψει το διακριτικό:
Μπορείτε επίσης να καταχραστείτε τα δικαιώματα του ρόλου του lambda από τη λειτουργία lambda ίδια. Αν ο ρόλος του lambda είχε αρκετά δικαιώματα, θα μπορούσατε να το χρησιμοποιήσετε για να σας χορηγήσει δικαιώματα διαχειριστή:
Είναι επίσης δυνατή η διαρροή των διαπιστευτηρίων ρόλου του lambda χωρίς την ανάγκη εξωτερικής σύνδεσης. Αυτό θα ήταν χρήσιμο για Διακομισμένα Lambdas που χρησιμοποιούνται σε εσωτερικές εργασίες. Αν υπάρχουν άγνωστες ομάδες ασφαλείας που φιλτράρουν τα αντίστροφα κελιά σας, αυτό το τμήμα κώδικα θα σας επιτρέψει να διαρρεύσετε απευθείας τα διαπιστευτήρια ως έξοδο του lambda.
Πιθανή Επίδραση: Άμεση ανύψωση προνομίων στο καθορισμένο ρόλο υπηρεσίας lambda.
Σημείωση ότι ακόμα κι αν φαίνεται ενδιαφέρον το lambda:InvokeAsync
δεν επιτρέπει από μόνο του την εκτέλεση της εντολής aws lambda invoke-async
, χρειάζεστε επίσης το lambda:InvokeFunction
iam:PassRole
, lambda:CreateFunction
, lambda:AddPermission
iam:PassRole
, lambda:CreateFunction
, lambda:AddPermission
Όπως και στο προηγούμενο σενάριο, μπορείτε να χορηγήσετε στον εαυτό σας την άδεια lambda:InvokeFunction
αν έχετε την άδεια lambda:AddPermission
Πιθανή Επίπτωση: Άμεση αύξηση προνομίων στο καθορισμένο ρόλο υπηρεσίας Lambda.
iam:PassRole
, lambda:CreateFunction
, lambda:CreateEventSourceMapping
iam:PassRole
, lambda:CreateFunction
, lambda:CreateEventSourceMapping
Οι χρήστες με δικαιώματα iam:PassRole
, lambda:CreateFunction
, και lambda:CreateEventSourceMapping
(και πιθανώς dynamodb:PutItem
και dynamodb:CreateTable
) μπορούν να αυξήσουν έμμεσα τα προνόμια ακόμη και χωρίς το lambda:InvokeFunction
.
Μπορούν να δημιουργήσουν μια συνάρτηση Lambda με κακόβουλο κώδικα και να της αναθέσουν έναν υπάρχοντα ρόλο IAM.
Αντί να εκτελούν απευθείας τη Lambda, ο χρήστης δημιουργεί ή χρησιμοποιεί έναν υπάρχοντα πίνακα DynamoDB, συνδέοντάς τον με τη Lambda μέσω ενός χαρτογραφήματος πηγής συμβάντος. Αυτή η ρύθμιση εξασφαλίζει ότι η συνάρτηση Lambda ενεργοποιείται αυτόματα με την εισαγωγή ενός νέου στοιχείου στον πίνακα, είτε από την ενέργεια του χρήστη είτε από άλλη διαδικασία, εκτελώντας έτσι έμμεσα τη συνάρτηση Lambda και εκτελώντας τον κώδικα με τα δικαιώματα του περασμένου ρόλου IAM.
Αν το DynamoDB είναι ήδη ενεργό στο περιβάλλον του AWS, ο χρήστης χρειάζεται μόνο να καθιερώσει την αντιστοίχιση πηγής συμβάντος για τη λειτουργία Lambda. Ωστόσο, αν το DynamoDB δεν χρησιμοποιείται, ο χρήστης πρέπει να δημιουργήσει έναν νέο πίνακα με ενεργοποιημένη τη ροή:
Τώρα είναι δυνατό να συνδέσετε τη Lambda λειτουργία με τον πίνακα DynamoDB με τον δημιουργία εκχώρησης πηγής συμβάντος:
Με τη Lambda λειτουργία που συνδέεται με τη ροή του DynamoDB, ο επιτιθέμενος μπορεί έμμεσα να ενεργοποιήσει τη Lambda ενεργοποιώντας τη ροή του DynamoDB. Αυτό μπορεί να επιτευχθεί εισάγοντας ένα στοιχείο στον πίνακα του DynamoDB:
Πιθανή Επίδραση: Άμεση ανύψωση προνομίων στον ρόλο υπηρεσίας lambda που καθορίζεται.
lambda:AddPermission
lambda:AddPermission
Ένας επιτιθέμενος με αυτήν την άδεια μπορεί να χορηγήσει στον εαυτό του (ή σε άλλους) οποιεσδήποτε άδειες (αυτό δημιουργεί πολιτικές βασισμένες στον πόρο για τη χορήγηση πρόσβασης στον πόρο):
Πιθανή Επίπτωση: Άμεση αύξηση προνομίων στον ρόλο υπηρεσίας lambda με τη χορήγηση δικαιώματος τροποποίησης του κώδικα και εκτέλεσής του.
lambda:AddLayerVersionPermission
lambda:AddLayerVersionPermission
Ένας επιτιθέμενος με αυτό το δικαίωμα μπορεί να χορηγήσει στον εαυτό του (ή σε άλλους) το δικαίωμα lambda:GetLayerVersion
. Μπορεί να έχει πρόσβαση στο layer και να αναζητήσει ευπαθείς προς επίθεση σημεία ή ευαίσθητες πληροφορίες.
Πιθανή Επίπτωση: Πιθανή πρόσβαση σε ευαίσθητες πληροφορίες.
lambda:UpdateFunctionCode
lambda:UpdateFunctionCode
Οι χρήστες που κατέχουν την άδεια lambda:UpdateFunctionCode
έχουν τη δυνατότητα να τροποποιήσουν τον κώδικα μιας υπάρχουσας λειτουργίας Lambda που συνδέεται με έναν ρόλο IAM.
Ο επιτιθέμενος μπορεί να τροποποιήσει τον κώδικα της λειτουργίας Lambda για να εξαγάγει τα διαπιστευτήρια IAM.
Παρόλο που ο επιτιθέμενος ενδέχεται να μην έχει την άμεση δυνατότητα να εκτελέσει τη λειτουργία, εάν η λειτουργία Lambda είναι υπάρχουσα και λειτουργική, είναι πιθανό να ενεργοποιηθεί μέσω υπαρχόντων ροών εργασίας ή συμβάντων, διευκολύνοντας έτσι έμμεσα την εκτέλεση του τροποποιημένου κώδικα.
Πιθανή Επίπτωση: Άμεση αύξηση προνομιακών δικαιωμάτων στον λογαριασμό υπηρεσίας lambda που χρησιμοποιείται.
lambda:UpdateFunctionConfiguration
lambda:UpdateFunctionConfiguration
Εισαγωγή
Επίπεδα Lambda επιτρέπει την συμπερίληψη **κ
Αυτά είναι τα μέρη:
/var/task
/opt/python/lib/python3.7/site-packages
/opt/python
/var/runtime
/var/lang/lib/python37.zip
/var/lang/lib/python3.7
/var/lang/lib/python3.7/lib-dynload
/var/lang/lib/python3.7/site-packages
/opt/python/lib/python3.7/site-packages
/opt/python
Για παράδειγμα, η βιβλιοθήκη boto3 φορτώνεται από το /var/runtime/boto3
(4η θέση).
Εκμετάλλευση
Είναι δυνατόν να καταχραστείτε την άδεια lambda:UpdateFunctionConfiguration
για προσθήκη νέου επιπέδου σε μια λειτουργία lambda. Για να εκτελέσετε αυθαίρετο κώδικα, αυτό το επίπεδο πρέπει να περιέχει κάποια βιβλιοθήκη που η lambda θα εισάγει. Αν μπορείτε να διαβάσετε τον κώδικα της lambda, μπορείτε να το βρείτε εύκολα, επίσης σημειώστε ότι είναι πιθανό ότι η lambda χρησιμοποιεί ήδη ένα επίπεδο και μπορείτε να κατεβάσετε το επίπεδο και να προσθέσετε τον κώδικά σας εκεί.
Για παράδειγμα, ας υποθέσουμε ότι η lambda χρησιμοποιεί τη βιβλιοθήκη boto3, αυτό θα δημιουργήσει ένα τοπικό επίπεδο με την τελευταία έκδοση της βιβλιοθήκης:
Μπορείτε να ανοίξετε το ./lambda_layer/boto3/__init__.py
και να προσθέσετε την παθογένεια στον κώδικα (ένα λειτουργία για εξυφαντώση διαπιστευμάτων ή για λήψη αντίστροφης κέλυφους για παράδειγμα).
Στη συνέχεια, συμπιέστε τον φάκελο ./lambda_layer
και ανεβάστε το νέο επίπεδο lambda στον δικό σας λογαριασμό (ή στον λογαριασμό του θύματος, αλλά μπορεί να μην έχετε δικαιώματα γι' αυτό).
Σημειώστε ότι πρέπει να δημιουργήσετε έναν φάκελο python και να τοποθετήσετε τις βιβλιοθήκες εκεί για να αντικαταστήσετε το /opt/python/boto3. Επίσης, το επίπεδο πρέπει να είναι συμβατό με την έκδοση της Python που χρησιμοποιείται από το lambda και αν το ανεβάσετε στον δικό σας λογαριασμό, πρέπει να είναι στην ίδια περιοχή:
Τώρα, κάντε το επιφορτισμένο lambda layer προσβάσιμο από οποιοδήποτε λογαριασμό:
Και επισυνάψτε το λάμδα επίπεδο στη λειτουργία λάμδα του θύματος:
Το επόμενο βήμα θα είναι είτε να εκτελέσουμε τη λειτουργία μόνοι μας αν μπορούμε, είτε να περιμένουμε μέχρι να εκτελεστεί με κανονικά μέσα - το οποίο είναι ο ασφαλέστερος τρόπος.
Μια πιο αόρατη μέθοδος εκμετάλλευσης αυτής της ευπάθειας μπορεί να βρεθεί στο:
AWS - Lambda Layers PersistenceΠιθανή Επίπτωση: Άμεση ανύψωση προνομίων στον ρόλο υπηρεσίας lambda που χρησιμοποιείται.
?iam:PassRole
, lambda:CreateFunction
, lambda:CreateFunctionUrlConfig
, lambda:InvokeFunctionUrl
?iam:PassRole
, lambda:CreateFunction
, lambda:CreateFunctionUrlConfig
, lambda:InvokeFunctionUrl
Ίσως με αυτές τις άδειες να είστε σε θέση να δημιουργήσετε μια λειτουργία και να την εκτελέσετε καλώντας το URL... αλλά δεν μπόρεσα να βρω έναν τρόπο να το δοκιμάσω, οπότε ενημερώστε με αν το κάνετε!
Lambda MitM
Κάποιες lambdas θα λαμβάνουν ευαίσθητες πληροφορίες από τους χρήστες σε παραμέτρους. Αν καταφέρετε RCE σε μία από αυτές, μπορείτε να εξαγάγετε τις πληροφορίες που άλλοι χρήστες στέλνουν σε αυτή, ελέγξτε το στο:
AWS - Steal Lambda RequestsΑναφορές
Last updated