Энтузиаст обошёл аутентификацию AWS API Gateway через завершающий слеш
Энтузиаст рассказал, как он обошёл аутентификацию AWS API Gateway, добавив trailing slash (завершающий слеш, косую черту в конце URL-адреса) в конце. За это он получил вознаграждение в размере $12 000.
«Я изучал мобильный API одной финтех-компании и заметил нечто, что не имело смысла. Запрос GET /v1/accounts возвращал 401. Запрос GET /v1/accounts/ возвращал 200 с полными данными учётной записи. Один символ. Совершенно разный уровень безопасности», — отметил он.
Маршруты в OpenAPI:
Энтузиаст выяснил, что API работал на AWS HTTP API — более новой и дешёвой альтернативе REST API. Авторизатор Lambda проверял JWT на соответствие Cognito и возвращал политику IAM. При этом авторизатор запускался для каждого запроса, но HTTP API одновременно определял, существует ли этот маршрут и разрешает ли его авторизатор, и эти два уровня «не совпадали».
«Я запустил ffuf для этого пути. Результаты были… противоречивыми. Шаблон: любой путь, который более-менее соответствовал префиксу маршрута, запускал авторизатор, а затем переходил к интеграции без повторной проверки аутентификации», — пишет автор.
По его словам, HTTP API по умолчанию использует так называемое жадное сопоставление путей. /v1/accounts/ совпал с /v1/accounts в качестве префикса. Авторизатор выполнился и вернул Allow. Затем выполнилась интеграция — но сопоставление интеграции оказалось нечётким. Путь был переписан, контекст аутентификации был потерян, и энтузиаст оказался без действительного JWT.
Он решил отследить маршрут $default в HTTP API. Это универсальный маршрут, который финтех-компания настроила на возврат 404, но в какой-то момент также подключила фиктивную интеграцию для проверки работоспособности. Эта фиктивная интеграция не проверяла аутентификацию — она просто
Читать на habr.com