AWS - API Gateway Unauthenticated Enum

HackTricks 지원

API Invoke 우회

Attack Vectors for APIs Using AWS API Gateway Lambda Authorizers - Alexandre & Leonardo 발표에 따르면, Lambda Authorizers는 IAM 구문을 사용하여 API 엔드포인트를 호출할 수 있는 권한을 부여하도록 구성될 수 있습니다. 이는 문서에서 가져온 것입니다:

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

이 방법으로 엔드포인트에 대한 권한을 부여하는 문제는 "*"가 "모든 것"을 의미하며 더 이상 정규 표현식 구문이 지원되지 않는다는 점입니다.

몇 가지 예:

  • 각 사용자에게 /dashboard/user/{username}에 접근할 수 있도록 하기 위해 arn:aws:execute-apis:sa-east-1:accid:api-id/prod/*/dashboard/*와 같은 규칙을 사용하면 예를 들어 /admin/dashboard/createAdmin과 같은 다른 경로에도 접근할 수 있게 됩니다.

"*"는 슬래시로 확장이 멈추지 않는다는 점에 유의하십시오. 따라서 예를 들어 api-id에 "*"를 사용하면 최종 정규 표현식이 여전히 유효한 한 "모든 단계" 또는 "모든 메서드"를 나타낼 수도 있습니다. 따라서 arn:aws:execute-apis:sa-east-1:accid:*/prod/GET/dashboard/* 는 예를 들어 /prod/GET/dashboard/admin 경로로 테스트 단계에 대한 post 요청을 검증할 수 있습니다.

항상 무엇을 허용할지 명확히 하고 부여된 권한으로 다른 시나리오가 가능한지 확인해야 합니다.

추가 정보는 docs 외에도 이 공식 aws github에서 authorizers를 구현하는 코드를 찾을 수 있습니다.

IAM Policy Injection

동일한 talk에서 코드가 사용자 입력을 사용하여 IAM 정책을 생성하는 경우, 와일드카드(및 "." 또는 특정 문자열 등)가 포함되어 제한을 우회할 수 있다는 사실이 노출되었습니다.

Public URL template

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

Get Account ID from public API Gateway URL

S3 버킷, Data Exchange 및 Lambda URL 게이트웨이와 마찬가지로, 공개 API Gateway URL에서 aws:ResourceAccount Policy Condition Key를 악용하여 계정 ID를 찾을 수 있습니다. 이는 정책의 aws:ResourceAccount 섹션에서 와일드카드를 악용하여 한 번에 한 문자씩 계정 ID를 찾는 방식으로 수행됩니다. 이 기술을 사용하면 태그 키를 알고 있는 경우 태그의 값도 얻을 수 있습니다 (기본적으로 흥미로운 것들이 있습니다).

자세한 내용은 original research 및 이 익스플로잇을 자동화하는 도구 conditional-love에서 확인할 수 있습니다.

HackTricks 지원

Last updated