AWS - Steal Lambda Requests
Last updated
Last updated
Slicer είναι ένας διεργασία έξω από τον εμπορευματοκιβώτιο που στέλνει κλήσεις στη διαδικασία init.
Η διαδικασία init ακούει στη θύρα 9001 αποκαλύπτοντας μερικά ενδιαφέροντα σημεία:
/2018-06-01/runtime/invocation/next
– λήψη του επόμενου συμβάντος κλήσης
/2018-06-01/runtime/invocation/{invoke-id}/response
– επιστροφή της απάντησης του χειριστή για την κλήση
/2018-06-01/runtime/invocation/{invoke-id}/error
– επιστροφή σφάλματος εκτέλεσης
Το bootstrap.py έχει έναν βρόχο που λαμβάνει κλήσεις από τη διαδικασία init και καλεί τον κώδικα των χρηστών για να τις χειριστεί (/next
).
Τέλος, το bootstrap.py στέλνει στη διαδικασία init την απάντηση
Σημειώστε ότι το bootstrap φορτώνει τον κώδικα του χρήστη ως ένα πρόσθετο, οπότε οποιαδήποτε εκτέλεση κώδικα που πραγματοποιείται από τον κώδικα των χρηστών συμβαίνει πραγματικά σε αυτήν τη διαδικασία.
Ο στόχος αυτής της επίθεσης είναι να κάνει τον κώδικα των χρηστών να εκτελέσει μια κακόβουλη διαδικασία bootstrap.py
μέσα στη διαδικασία bootstrap.py
που χειρίζεται το ευάλωτο αίτημα. Με αυτόν τον τρόπο, η κακόβουλη διαδικασία bootstrap θα αρχίσει να επικοινωνεί με τη διαδικασία init για να χειριστεί τα αιτήματα ενώ το νόμιμο bootstrap είναι παγιδευμένο εκτελώντας τον κακόβουλο, έτσι δεν θα ζητήσει αιτήματα από τη διαδικασία init.
Αυτό είναι ένα εύκολο έργο να επιτευχθεί καθώς ο κώδικας του χρήστη εκτελείται από το νόμιμο bootstrap.py
διαδικασία. Έτσι ο επιτιθέμενος θα μπορούσε:
Αποστολή ψεύτικου αποτελέσματος της τρέχουσας κλήσης στη διαδικασία init, έτσι η init νομίζει ότι η διαδικασία bootstrap περιμένει για περισσότερες κλήσεις.
Πρέπει να σταλεί ένα αίτημα στο /${invoke-id}/response
Το invoke-id μπορεί να αποκτηθεί από τη στοίβα της νόμιμης bootstrap.py
διαδικασίας χρησιμοποιώντας το inspect πακέτο της Python (όπως προτείνεται εδώ) ή απλά ζητώντας το ξανά από το /2018-06-01/runtime/invocation/next
(όπως προτείνεται εδώ).
Εκτέλεση μιας κακόβουλης boostrap.py
που θα χειριστεί τις επόμενες κλήσεις
Για λόγους αόρατης λειτουργίας, είναι δυνατόν να σταλούν οι παράμετροι κλήσης των λάμδα σε έναν ελεγχόμενο από τον επιτιθέμενο C2 και στη συνέχεια να χειριστεί τα αιτήματα όπως συνήθως.
Για αυτήν την επίθεση, είναι αρκετό να αποκτήσετε τον αρχικό κώδικα του bootstrap.py
από το σύστημα ή το github, προσθέσετε τον κακόβουλο κώδικα και τρέξετέ τον από την τρέχουσα κλήση λάμδα.
Βρείτε μια ευπάθεια RCE.
Δημιουργήστε έναν κακόβουλο bootstrap (π.χ. https://raw.githubusercontent.com/carlospolop/lambda_bootstrap_switcher/main/backdoored_bootstrap.py)
Εκτελέστε τον κακόβουλο bootstrap.
Μπορείτε εύκολα να εκτελέσετε αυτές τις ενέργειες τρέχοντας:
Για περισσότερες πληροφορίες ελέγξτε https://github.com/carlospolop/lambda_bootstrap_switcher