AWS - API Gateway Unauthenticated Enum

Support HackTricks

API Invoke bypass

Zgodnie z prezentacją Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo, Lambda Authorizers mogą być konfigurowane przy użyciu składni IAM w celu nadania uprawnień do wywoływania punktów końcowych API. To jest wzięte z dokumentacji:

{
"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"
]
}
]
}

Problem z tym sposobem nadawania uprawnień do wywoływania punktów końcowych polega na tym, że "*" oznacza "cokolwiek" i nie obsługuje więcej składni regex.

Kilka przykładów:

  • Reguła taka jak arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*, aby dać każdemu użytkownikowi dostęp do /dashboard/user/{username}, da im dostęp do innych tras, takich jak /admin/dashboard/createAdmin, na przykład.

Zauważ, że "*" nie przestaje się rozwijać z ukośnikami, dlatego, jeśli użyjesz "*" w api-id, na przykład, może to również oznaczać "dowolny etap" lub "dowolną metodę", o ile końcowy regex jest nadal ważny. Więc arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* Może zwalidować żądanie POST do etapu testowego do ścieżki /prod/GET/dashboard/admin, na przykład.

Zawsze powinieneś mieć jasno określone, co chcesz zezwolić na dostęp, a następnie sprawdzić, czy inne scenariusze są możliwe z przyznanymi uprawnieniami.

Aby uzyskać więcej informacji, oprócz dokumentacji, możesz znaleźć kod do implementacji autoryzatorów w tym oficjalnym githubie aws.

Wstrzykiwanie polityki IAM

W tej samej prezentacji ujawniono fakt, że jeśli kod używa danych wejściowych użytkownika do generowania polityk IAM, dzikie znaki (i inne, takie jak "." lub konkretne ciągi) mogą być tam zawarte w celu obejścia ograniczeń.

Szablon publicznego URL

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

Uzyskaj identyfikator konta z publicznego adresu URL API Gateway

Podobnie jak w przypadku koszyków S3, Data Exchange i adresów URL bramek Lambda, możliwe jest znalezienie identyfikatora konta, wykorzystując aws:ResourceAccount Policy Condition Key z publicznego adresu URL API Gateway. Robi się to, znajdując identyfikator konta jeden znak na raz, wykorzystując znaki wieloznaczne w sekcji aws:ResourceAccount polityki. Ta technika pozwala również uzyskać wartości tagów, jeśli znasz klucz tagu (jest kilka domyślnych, interesujących).

Możesz znaleźć więcej informacji w oryginalnych badaniach oraz w narzędziu conditional-love, aby zautomatyzować tę eksploitację.

Wsparcie HackTricks

Last updated