Индийский ИБ-специалист Бхавук Джайн (Bhavuk Jain) получил от компании Apple 100 000 долларов по программе bug bounty за обнаружение критической уязвимости в механизме Sign in with Apple. Проблема позволяла удаленным злоумышленникам обходить аутентификацию и захватывать учетные записи пользователей в сторонних сервисах и приложениях, которые поддерживали Sign in with Apple.
Напомню, что функциональность Sign in with Apple была представлена в прошлом году на WWDC 2019. Этот механизм позволяет пользователям авторизоваться в сторонних приложениях и сервисах, используя Apple ID и iCloud (речь идет не только о приложениях для iOS). В сущности, Sign in with Apple работает так же, как аналогичные системы, предоставляемые Facebook и Google, однако разработчики Apple делают больший упор на конфиденциальность пользователя, борьбу со слежкой и спамом. Так, кнопку Sign in with Apple можно интегрировать в любое приложение, и чаще всего, пользователю потребуется лишь пройти аутентификацию FaceID или Touch ID на своем устройстве, не раскрывая никаких личных данных и местоположения.
Исследователь рассказывает, что обнаруженная им проблема связана с тем, как реализована валидация пользователя на стороне клиента, еще до инициации запроса от аутентификационного сервера Apple.
Так, во время аутентификации пользователя через Sign in with Apple сервер генерирует веб-токен JSON (JSON Web Token, JWT), содержащий секретную информацию, которую стороннее приложение использует для подтверждения личности пользователя, вошедшего в систему. Однако специалист обнаружил, что хотя Apple и просит пользователей войти в учетную запись перед исходным запросом, система не проводит валидацию, не подтверждая, что на следующем этапе веб-токен JSON запрашивает тот же самый человек.
Отсутствие валидации позволяло злоумышленникам обмануть серверы Apple, предоставив им Apple ID, принадлежащий жертве, и вынудив сгенерировать JWT, который позволял бы, используя личность жертвы, войти в учетную запись стороннего приложения или сервиса.
«Я обнаружил, что могу запросить JWT для любого email-ID, и когда подпись этих токенов была верифицирована с использованием публичного ключа Apple, оказалось, что они действительны. Это означает, что злоумышленник может подделать JWT, связав с ним любой идентификатор электронной почты и получив доступ к аккаунтам жертвы», — пишут исследователь.
Джайн отмечает, что уязвимость работает даже в том случае, если пользователь решил скрыть свой идентификатор электронной почты от сторонних сервисов, и может использоваться для регистрации новой учетной записи с Apple ID жертвы.
«Последствия от [использования] этой уязвимости были бы критическим, поскольку проблема допускала полный захват учтенной записи. Многие разработчики интегрировали в свои продукты Sign in with Apple, так как это обязательное условие для приложений, поддерживающих вход через социальные сети. К примеру, Sign in with Apple используют Dropbox, Spotify, Airbnb, Giphy».
В настоящее время разработчики Apple уже устранили проблему и сообщают, что баг не использовался хакерами для компрометации чужих аккаунтов.