Как безопасно связать идентификатор установки приложения Github с учетной записью веб-сайта, интегрирующегося с приложением GitHub?

#github #authorization #github-api #github-app

#github #авторизация #github-api #github-app

Вопрос:

Я нахожусь в процессе создания веб-сайта, интегрированного с моим приложением GitHub.

У этого веб-сайта есть свои пользователи (из Google OAuth), которые могут подключить свою учетную запись к своей учетной записи GitHub, установив мое приложение GitHub.

В процессе установки приложения GitHub есть что-то, что я не могу понять:

После того, как пользователь установит мое приложение на GitHub:

  • их браузер перенаправляется на URL («Установочный URL после установки») с идентификатором установки в URL.
  • GitHub вызывает мой webhook для объявления установки

Идентификатор установки — это разумная информация, поскольку, если злоумышленник моего веб-сайта (злоумышленник) может обмануть мой веб-сайт, связав свою учетную запись с идентификатором установки GitHub кого-либо другого (жертвы), мой веб-сайт будет работать с API GitHub жертвы от имени злоумышленника (что являетсяплохо!).

Теперь моя цель — надежно привязать этот идентификатор установки к пользователю моего веб-сайта.Под безопасным я подразумеваю, что мой веб-сайт не может предоставить злоумышленнику разрешения на установку моего приложения на GitHub жертвы.

Использование идентификатора установки GitHub, указанного в «URL-адресе установки после установки», для привязки этой установки к учетной записи моего веб-сайта небезопасно, поскольку у меня нет способа проверить, что этот идентификатор установки «принадлежит» пользователю моего веб-сайта, поскольку URL-адрес может быть подделан злоумышленником, знающим действительный URL-адрес.установите идентификатор жертвы.

Несовершенные меры по смягчению последствий:

  • подтвердите, что идентификатор установки не привязан ни к какой другой учетной записи пользователя моего веб-сайта
    • плохо, как это можно обойти, если по какой-то причине законный пользователь никогда не перенаправлялся на мой веб-сайт, используя «Установочный URL после установки», чтобы привязать этот идентификатор установки GitHub к своей учетной записи
    • плохо, как и в любом случае, это было бы уязвимо для «гонки» (или времени?) атака на подтверждение (если злоумышленнику удается подтвердить действительный идентификатор установки до жертвы)
  • использовать в сочетании с событием события API GitHub, полученным на webhook
    • webhook запускается серверной частью Github и, следовательно, не может идентифицировать вошедшего в систему пользователя веб-сайта, что не помогает нам привязать идентификатор установки github к соответствующему пользователю веб-сайта.

Я что-то упускаю или это недостаток модели авторизации приложения?

Ответ №1:

Найден ответ:

Мне нужно было активировать «Запросить авторизацию пользователя (OAuth) во время установки». Таким образом, GitHub отвечает защищенным токеном, который я могу использовать для проверки установки вместо просто идентификатора установки.

Документация: https://docs.github.com/en/free-pro-team@latest/developers/apps/identifying-and-authorizing-users-for-github-apps#web-application-flow