AWS - API Gateway Unauthenticated Enum

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

API Invoke bypass

Σύμφωνα με την ομιλία Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, Lambda Authorizers μπορούν να ρυθμιστούν using IAM syntax ώστε να παρέχουν δικαιώματα για invoke των API endpoints. Αυτό προέρχεται from the docs:

{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Permission",
"Action": ["execute-api:Execution-operation"],
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/stage/METHOD_HTTP_VERB/Resource-path"
]
}
]
}

Το πρόβλημα με αυτόν τον τρόπο χορήγησης δικαιωμάτων για την κλήση endpoints είναι ότι το “*” συνεπάγεται “anything” και δεν υποστηρίζεται πλέον σύνταξη regex.

Μερικά παραδείγματα:

  • Ένας κανόνας όπως arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/* προκειμένου να δώσει σε κάθε χρήστη πρόσβαση στο /dashboard/user/{username} θα τους δώσει πρόσβαση και σε άλλες διαδρομές όπως /admin/dashboard/createAdmin για παράδειγμα.

Warning

Σημειώστε ότι “*” δεν σταματά να επεκτείνεται με slashes, επομένως, αν χρησιμοποιήσετε “*” στο api-id για παράδειγμα, μπορεί επίσης να υποδηλώνει “any stage” ή “any method” όσο το τελικό regex παραμένει έγκυρο.
So arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/*
Can validate a post request to test stage to the path /prod/GET/dashboard/admin for example.

Πρέπει πάντα να είναι σαφές τι θέλετε να επιτρέψετε και στη συνέχεια να ελέγξετε αν υπάρχουν άλλα σενάρια που γίνονται δυνατά με τα παραχωρημένα δικαιώματα.

Για περισσότερες πληροφορίες, πέρα από τα docs, μπορείτε να βρείτε κώδικα για την υλοποίηση authorizers στο this official aws github.

IAM Policy Injection

Στην ίδια talk αποκαλύπτεται το γεγονός ότι αν ο κώδικας χρησιμοποιεί user input για να generate the IAM policies, wildcards (και άλλα όπως “.” ή συγκεκριμένα strings) μπορούν να συμπεριληφθούν εκεί με στόχο το bypassing restrictions.

Πρότυπο δημόσιου URL

https://{random_id}.execute-api.{region}.amazonaws.com/{user_provided}

Λήψη Account ID από public API Gateway URL

Όπως με τα S3 buckets, Data Exchange και Lambda URLs gateways, είναι δυνατό να βρεις το Account ID ενός λογαριασμού εκμεταλλευόμενος το aws:ResourceAccount Policy Condition Key από ένα public API Gateway URL. Αυτό γίνεται βρίσκοντας το Account ID χαρακτήρα-χαρακτήρα εκμεταλλευόμενοι wildcards στην ενότητα aws:ResourceAccount της policy.
Αυτή η τεχνική επιτρέπει επίσης την ανάκτηση των values of tags εάν γνωρίζεις το tag key (υπάρχουν μερικά προεπιλεγμένα ενδιαφέροντα).

Μπορείτε να βρείτε περισσότερες πληροφορίες στην original research και στο εργαλείο conditional-love για να αυτοματοποιήσετε αυτήν την εκμετάλλευση.

Tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks