AWS - API Gateway Enum

Reading time: 11 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

API Gateway

Osnovne informacije

AWS API Gateway je sveobuhvatna usluga koju nudi Amazon Web Services (AWS) dizajnirana za programere da kreiraju, objavljuju i nadgledaju API-je na velikoj skali. Funkcioniše kao ulazna tačka za aplikaciju, omogućavajući programerima da uspostave okvir pravila i procedura. Ovaj okvir reguliše pristup spoljnim korisnicima određenim podacima ili funkcionalnostima unutar aplikacije.

API Gateway vam omogućava da definišete kako bi zahtevi za vaše API-je trebali biti obrađeni, i može kreirati prilagođene API krajnje tačke sa specifičnim metodama (npr. GET, POST, PUT, DELETE) i resursima. Takođe može generisati klijentske SDK-ove (Softverske razvojne kompleti) kako bi olakšao programerima pozivanje vaših API-ja iz njihovih aplikacija.

Tipovi API Gateway-a

  • HTTP API: Kreirajte REST API-je sa niskom latencijom i troškovima, sa ugrađenim funkcijama kao što su OIDC i OAuth2, i podrškom za CORS. Radi sa sledećim: Lambda, HTTP backend-ima.
  • WebSocket API: Kreirajte WebSocket API koristeći trajne veze za slučajeve korišćenja u realnom vremenu kao što su chat aplikacije ili kontrolne table. Radi sa sledećim: Lambda, HTTP, AWS uslugama.
  • REST API: Razvijajte REST API gde dobijate potpunu kontrolu nad zahtevima i odgovorima zajedno sa mogućnostima upravljanja API-jem. Radi sa sledećim: Lambda, HTTP, AWS uslugama.
  • REST API Privatni: Kreirajte REST API koji je dostupan samo iz VPC-a.

Glavne komponente API Gateway-a

  1. Resursi: U API Gateway-u, resursi su komponente koje čine strukturu vašeg API-ja. Oni predstavljaju različite putanje ili krajnje tačke vašeg API-ja i odgovaraju raznim akcijama koje vaš API podržava. Resurs je svaka metoda (npr. GET, POST, PUT, DELETE) unutar svake putanje (/, ili /users, ili /user/{id}).
  2. Faze: Faze u API Gateway-u predstavljaju različite verzije ili okruženja vašeg API-ja, kao što su razvoj, testiranje ili produkcija. Možete koristiti faze za upravljanje i implementaciju više verzija vašeg API-ja istovremeno, omogućavajući vam da testirate nove funkcije ili ispravke grešaka bez uticaja na produkciono okruženje. Faze takođe podržavaju varijable faze, koje su parovi ključ-vrednost koji se mogu koristiti za konfiguraciju ponašanja vašeg API-ja na osnovu trenutne faze. Na primer, mogli biste koristiti varijable faze da usmerite API zahteve na različite Lambda funkcije ili druge backend usluge u zavisnosti od faze.
  • Faza se označava na početku URL-a krajnje tačke API Gateway-a.
  1. Autorizatori: Autorizatori u API Gateway-u su odgovorni za kontrolu pristupa vašem API-ju verifikovanjem identiteta pozivaoca pre nego što dozvole da zahtev nastavi. Možete koristiti AWS Lambda funkcije kao prilagođene autorizatore, što vam omogućava da implementirate sopstvenu logiku autentifikacije i autorizacije. Kada zahtev stigne, API Gateway prosleđuje autorizacioni token zahteva Lambda autorizatoru, koji obrađuje token i vraća IAM politiku koja određuje koje akcije pozivalac može da izvrši. API Gateway takođe podržava ugrađene autorizatore, kao što su AWS Identity and Access Management (IAM) i Amazon Cognito.
  2. Politika resursa: Politika resursa u API Gateway-u je JSON dokument koji definiše dozvole za pristup vašem API-ju. Slična je IAM politici, ali je posebno prilagođena za API Gateway. Možete koristiti politiku resursa da kontrolišete ko može pristupiti vašem API-ju, koje metode mogu pozvati i sa kojih IP adresa ili VPC-a se mogu povezati. Politike resursa se mogu koristiti u kombinaciji sa autorizatorima kako bi se obezbedila precizna kontrola pristupa za vaš API.
  • Da bi promena imala efekat, API treba da bude ponovo implementiran nakon što je politika resursa izmenjena.

Logovanje

Podrazumevano, CloudWatch Logs su isključeni, Access Logging je isključen, a X-Ray tracing je takođe isključen.

Enumeracija

tip

Imajte na umu da su za enumeraciju resursa u oba AWS API-ja (apigateway i apigatewayv2) jedina dozvola koja vam je potrebna i jedina dozvola za čitanje koja se može dodeliti apigateway:GET, sa tim možete enumerisati sve.

bash
# Generic info
aws apigateway get-account
aws apigateway get-domain-names
aws apigateway get-usage-plans
aws apigateway get-vpc-links
aws apigateway get-client-certificates

# Enumerate APIs
aws apigateway get-rest-apis # This will also show the resource policy (if any)
## Get stages
aws apigateway get-stages --rest-api-id <id>
## Get resources
aws apigateway get-resources --rest-api-id <id>
## Get API resource action per HTTP verb (check authorizers and api key required)
aws apigateway get-method --http-method GET --rest-api-id <api-id> --resource-id <resource-id>

## Call API
https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource>
## API authorizers
aws apigateway get-authorizers --rest-api-id <id>
## Models
aws apigateway get-models --rest-api-id <id>
## More info
aws apigateway get-gateway-responses --rest-api-id <id>
aws apigateway get-request-validators --rest-api-id <id>
aws apigateway get-deployments --rest-api-id <id>

# Get api keys generated
aws apigateway get-api-keys --include-value
aws apigateway get-api-key --api-key <id> --include-value # Get just 1
## Example use API key
curl -X GET -H "x-api-key: AJE&Ygenu4[..]" https://e83uuftdi8.execute-api.us-east-1.amazonaws.com/dev/test
## Usage plans
aws apigateway get-usage-plans #Get limit use info
aws apigateway get-usage-plan-keys --usage-plan-id <plan_id> #Get clear text values of api keys
aws apigateway get-usage-plan-key --usage-plan-id <plan_id> --key-id <key_id>
###Already consumed
aws apigateway get-usage --usage-plan-id <plan_id> --start-date 2023-07-01 --end-date 2023-07-12

Različite autorizacije za pristup API Gateway krajnjim tačkama

Politika resursa

Moguće je koristiti politike resursa da definišete ko može da poziva API krajnje tačke.
U sledećem primeru možete videti da naznačena IP adresa ne može da pozove krajnju tačku /resource_policy putem GET.

IAM autorizator

Moguće je postaviti da metode unutar putanje (resursa) zahtevaju IAM autentifikaciju za pozivanje.

Kada je ovo postavljeno, dobićete grešku {"message":"Missing Authentication Token"} kada pokušate da dođete do krajnje tačke bez bilo kakve autorizacije.

Jedan jednostavan način da generišete očekivani token od strane aplikacije je korišćenje curl.

bash
$ curl -X <method> https://<api-id>.execute-api.<region>.amazonaws.com/<stage>/<resource> --user <AWS_ACCESS_KEY>:<AWS_SECRET_KEY> --aws-sigv4 "aws:amz:<region>:execute-api"

Drugi način je da se koristi Authorization tip AWS Signature unutar Postman.

Postavite accessKey i SecretKey naloga koji želite da koristite i možete se autentifikovati protiv API krajnje tačke.

Obe metode će generisati Authorization header kao što je:

AWS4-HMAC-SHA256 Credential=AKIAYY7XU6ECUDOTWB7W/20220726/us-east-1/execute-api/aws4_request, SignedHeaders=host;x-amz-date, Signature=9f35579fa85c0d089c5a939e3d711362e92641e8c14cc571df8c71b4bc62a5c2

Napomena da u drugim slučajevima Authorizer možda nije dobro kodiran i jednostavno slanje bilo čega unutar Authorization header će omogućiti da se vidi skriveni sadržaj.

Potpisivanje zahteva koristeći Python

python

pip install requests
pip install requests-aws4auth
pip install boto3

import boto3
import requests
from requests_aws4auth import AWS4Auth

region = 'us-east-1'  # Region
service = 'execute-api'
access_key = 'YOUR_ACCESS_KEY'
secret_key = 'YOUR_SECRET_KEY'

url = 'https://<apiid>.execute-api.us-east-1.amazonaws.com/<stage>/<resource>'

session = boto3.Session(aws_access_key_id=access_key, aws_secret_access_key=secret_key)
credentials = session.get_credentials()
awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)

response = requests.get(url, auth=awsauth)

print(response.text)

Prilagođeni Lambda Autorizator

Moguće je koristiti lambda funkciju koja na osnovu datog tokena vraća IAM politiku koja ukazuje da li je korisnik ovlašćen da pozove API krajnju tačku.
Možete postaviti svaku metodu resursa koja će koristiti autorizator.

Primer koda Lambda Autorizatora
python
import json

def lambda_handler(event, context):
token = event['authorizationToken']
method_arn = event['methodArn']

if not token:
return {
'statusCode': 401,
'body': 'Unauthorized'
}

try:
# Replace this with your own token validation logic
if token == "your-secret-token":
return generate_policy('user', 'Allow', method_arn)
else:
return generate_policy('user', 'Deny', method_arn)
except Exception as e:
print(e)
return {
'statusCode': 500,
'body': 'Internal Server Error'
}

def generate_policy(principal_id, effect, resource):
policy = {
'principalId': principal_id,
'policyDocument': {
'Version': '2012-10-17',
'Statement': [
{
'Action': 'execute-api:Invoke',
'Effect': effect,
'Resource': resource
}
]
}
}
return policy

Pozovite ga sa nečim poput:

curl "https://jhhqafgh6f.execute-api.eu-west-1.amazonaws.com/prod/custom_auth" -H 'Authorization: your-secret-token'

warning

U zavisnosti od Lambda koda, ova autorizacija može biti ranjiva

Imajte na umu da ako se generiše i vrati deny policy, greška koju vraća API Gateway je: {"Message":"User is not authorized to access this resource with an explicit deny"}

Na ovaj način možete identifikovati ovu autorizaciju koja je na snazi.

Potreban API ključ

Moguće je postaviti API krajnje tačke koje zahtevaju važeći API ključ za kontakt.

Moguće je generisati API ključeve u API Gateway portalu i čak postaviti koliko često mogu biti korišćeni (u smislu zahteva po sekundi i u smislu zahteva po mesecu).

Da bi API ključ radio, potrebno je dodati ga u Usage Plan, ovaj plan korišćenja mora biti dodat u API Stage i povezani API stage treba da ima konfigurisano metod throttling za krajnju tačku koja zahteva API ključ:

Neautorizovani pristup

AWS - API Gateway Unauthenticated Enum

Privesc

AWS - Apigateway Privesc

Post Exploatacija

AWS - API Gateway Post Exploitation

Persistencija

AWS - API Gateway Persistence

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks