
Автоматизированный сканер безопасности авторизации для API на основе OpenAPI. Тестирует конечные точки GET с несколькими наборами учетных данных для обнаружения повышения привилегий и ошибок нарушенного контроля доступа с помощью анализа дифференциальных ответов.
Проблемы безопасности авторизации в современных веб-приложениях нелегко обнаружить с помощью сканеров безопасности. Несколько примеров из Shopify, LINE, NordVPN. Одна из причин в том, что сканеры безопасности в основном ищут SQLi, XSS, RCE, а не ошибки авторизации, и обычно не знают, как должно вести себя веб-приложение. Поэтому большинство ошибок авторизации сейчас обнаруживаются вручную. OpenAPI Security Scanner создан, чтобы помочь выявлять проблемы безопасности авторизации как с помощью автоматизации, так и при ручном анализе. Он работает как внешний инструмент модульного тестирования, чтобы убедиться, что всё ведёт себя так, как должно.
Посмотрите это видео, чтобы следовать инструкции, или продолжайте чтение.
Форкните или клонируйте этот проект и следуйте инструкциям ниже, чтобы начать.
Рабочий процесс использования этого сканера выглядит примерно так:
Для разработчиков использование этого инструмента добавляет дополнительный уровень уверенности в том, что API ведет себя так, как ожидается, как изнутри, так и снаружи. Сканер можно запускать при каждом развертывании кода, запуская пайплайн https://docs.gitlab.com/ee/ci/triggers/.
Для охотников за багами использование этого инструмента позволяет всегда быть в курсе изменений в целевом API, поскольку мы знаем, что даже если конкретная конечная точка не была уязвима раньше, она может стать уязвимой в будущем по разным причинам. Поэтому проще автоматизировать ручную часть охоты за багами с помощью этого инструмента.
Убедитесь, что у вас есть разрешение на сканирование целевого API.
Вам понадобится OpenAPI yaml-файл веб-приложения, и замените им содержимое api.yaml в репозитории.
Замените содержимое api.yaml на OpenAPI yaml-файл целевого приложения, затем перейдите в GitLab проекте Settings -> CI/CD -> Разверните Variables и введите переменные в указанных ниже форматах.
Предоставленные здесь учетные данные будут передаваться в вызовы API в формате заголовка Authorization: Bearer. Рекомендуется подготовить токены доступа как минимум для двух учетных записей пользователей с разными правами, а также можно создать более одного токена доступа на одну учетную запись для проверки корректного поведения токенов с разными областями.
{
"<user_a>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
},
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
],
"<user_b>":[
{
"scope":"<scope>",
"access_token":"<value>",
"name":"<name_of_access_token>"
}
]
}
Указанные здесь конечные точки должны быть вызовами API на основе GET, также можно включить запрос в тело JSON. В примере ниже конечная точка /org/{org}/repos и запрос к ней type=all. Для конечной точки /repos/{owner}/{repo} запроса не будет.
{
"/orgs/{org}/repos":{
"type":"all"
},
"/repos/{owner}/{repo}":{
}
}
Здесь можно указать переменные пути, и сканер сгенерирует все комбинации из значений переменных пути.
{
"org":[
"test-org"
],
"owner":[
"ngalongc",
"reconless"
],
"repo":[
"public-repo",
"private-repo"
]
}
В этом случае генерируются следующие комбинации вызовов API, и все они будут вызваны разными наборами учетных данных, указанных в OPENAPI_CREDS.
/orgs/test-org/repos?type=all
/repos/ngalongc/public-repo
/repos/ngalongc/private-repo
/repos/reconless/public-repo
/repos/reconless/private-repo
Перейдите по ссылке https://gitlab.com/-/profile/personal_access_tokens и создайте токен доступа api, затем замените значение здесь. Этот токен доступа GitLab используется для загрузки результатов сканирования из GitLab runner.
<YOU_GITLAB_API_ACCESS_TOKEN>
Это должно быть значение базового URL вашего API сервера
https://example.com/api/v3
Скриншот уведомления Slack при обнаружении изменений API

Скриншот результатов сканирования в артефактах

Пример отчета: https://ngalog-gitlab.gitlab.io/-/openapi_security_scanner/-/jobs/966841401/artifacts/sample.html
GET/users/{user_id}/activities, ответы изменяются при каждом вызове, поэтому обнаружение изменений в таких API не имеет смыслаВклад — это то, что делает сообщество открытого кода таким удивительным местом для обучения, вдохновения и творчества. Любой ваш вклад очень ценится.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)Распространяется по лицензии MIT. См. файл LICENSE для получения дополнительной информации.
Ron Chan - @ngalongc
Ссылка на проект: https://gitlab.com/ngalog-gitlab/openapi_security_scanner