Исследователи из компании SALT, занимающейся безопасностью веб-кодирования, только что опубликовали увлекательное описание того, как они обнаружили ошибка аутентификации дублированный CVE-2023-28131 в популярном онлайн-инструменте для создания приложений, известном как Expo.
Хорошая новость заключается в том, что Экспо ответил очень быстро к отчету об ошибке SALT, придумав исправление всего за несколько часов после ответственного раскрытия SALT.
К счастью, исправление не зависело от того, что клиенты что-либо загружали, потому что исправление было реализовано внутри облачной службы Expo и не требовало исправлений для каких-либо предустановленных приложений или кода на стороне клиента.
Экспо консультативный не только объяснил, что произошло и как компания это исправила, но и предложил своим клиентам советы по программированию о том, как избежать такой возможной уязвимости с другими онлайн-сервисами.
Затем SALT подождала три месяца, прежде чем опубликовать свой отчет, вместо того, чтобы как можно скорее выпустить его в рекламных целях, что дало пользователям Expo возможность переварить ответ Expo и действовать в соответствии с ним.
Хранение простое
Процесс аутентификации с ошибками подробно описан в отчет SALT, но мы представим здесь очень упрощенное описание того, что пошло не так в службе OAUTH Expo.
OAuth, Короче для Открытая структура авторизации, это процесс, который позволяет вам получить доступ к личным данным в онлайн-сервисе (например, редактирование вашего онлайн-профиля, добавление новой статьи в блоге или одобрение веб-сервиса для публикации сообщений в социальных сетях) без установки пароля с или войти непосредственно в саму службу.
Когда вы видите веб-сервисы, которые предлагают вам Войти через Google или Facebook вариант, например, они почти всегда используют OAUTH в фоновом режиме, поэтому вам не нужно создавать новое имя пользователя и новый пароль на еще одном веб-сайте или передавать свой номер телефона еще одной онлайн-службе.
Строго говоря, вы проходите аутентификацию косвенно, вводя свои учетные данные Google или Facebook только на один из этих сайтов.
Некоторым пользователям это не нравится, потому что они не хотят аутентифицироваться в Google или Facebook только для того, чтобы подтвердить свою личность на других, не связанных сайтах. Другим это нравится, потому что они предполагают, что такие сайты, как Facebook и Google, имеют больше опыта в обработке процесса входа в систему, безопасном хранении хэшей паролей и выполнении 2FA, чем веб-сайт-бутик, который пытался связать свои собственные процессы криптографической безопасности.
Аутсорсинговая аутентификация
Значительно упрощенный вход в систему в стиле OAUTH через вашу учетную запись Facebook на сайт под названием example.com
, происходит примерно так:
- Сайт
example.com
сообщает вашему приложению или браузеру, «Здравствуйте, X, идите и получите волшебный токен доступа к этому сайту от Facebook». - Вы посещаете специальный URL-адрес Facebook, входите в систему, если вы еще этого не сделали, и скажите: «Дайте мне волшебный токен доступа для
example.com
". - Если Facebook удовлетворен тем, что вы являетесь тем, за кого себя выдаете, он отвечает: «Здравствуйте, X, вот ваш волшебный токен доступа».
- Вы передаете токен доступа
example.com
, который затем может связаться с самим Facebook для проверки токена.
Обратите внимание, что только Facebook видит ваш пароль Facebook и код 2FA, если это необходимо, поэтому служба Facebook выступает в качестве посредника аутентификации между вами и example.com
.
За кулисами происходит окончательная проверка, например:
- Сайт
example.com
говорит Facebook, «Вы выпустили этот токен и проверяет ли он пользователя X?» - Если Facebook согласится, оно говорит
example.com
, «Да, мы считаем, что этот пользователь прошел аутентификацию».
Поддающаяся изменению последовательность
Ошибка, обнаруженная исследователями SALT в коде Expo, может быть вызвана злонамеренным нарушением обработки Expo того, что вы могли бы назвать процессом «брокерской аутентификации».
Ключевые моменты заключаются в следующем:
- Сам Expo добавляет обертку вокруг процесса проверки, так что он обрабатывает аутентификацию и проверку для вас, в конечном итоге передавая волшебный токен доступа для желаемого веб-сайта (
example.com
в обмене выше) обратно в приложение или на веб-сайт, с которого вы подключаетесь. - Параметры, используемые при обработке проверки упакованы в большой URL-адрес, который отправляется службе Expo.
- Один из этих параметров временно сохраняется в веб-файле cookie. который указывает URL-адрес, на который будет отправлен окончательный маркер безопасности Magic, чтобы разрешить доступ.
- Перед доставкой токена безопасности всплывающее окно просит вас проверить URL-адрес, который будет авторизован, чтобы вы могли поймать любого, кто пытается подставить фиктивный URL-адрес в процессе входа в систему.
- Если вы одобрите всплывающее окно, Expo перенаправляет вас к процессу проверки Facebook.
- Если Facebook одобрит проверку, он возвращает волшебный токен доступа к сервису Expo, а Expo передает его URL-адресу, который вы только что утвердили во всплывающем окне, получившему название
returnURL
. - Приложение или веб-сайт прослушивает указанное
returnURL
получает обратный вызов Экспо, получает токен доступа и, следовательно, аутентифицируется как вы.
К сожалению, исследователи SALT обнаружили, что они могут нарушить процесс входа в систему, используя код JavaScript для запуска доступа к первоначальному URL-адресу входа в Expo, но затем отключив всплывающее окно подтверждения, прежде чем вы успеете прочитать или утвердить его самостоятельно.
Однако на данный момент служба Expo уже установила файл cookie с именем ru
(Короче для returnURL
), чтобы сообщить ему, куда перезвонить, с вашим волшебным токеном доступа в конце.
Это означало, что киберпреступник мог обманом заставить код Expo «запомнить» returnURL
как https://roguesite.example
, при этом вы никогда не увидите диалоговое окно с предупреждением о том, что атака идет полным ходом, не говоря уже об одобрении ее по ошибке.
Затем исследователи использовали второй фрагмент кода JavaScript, чтобы имитировать перенаправление Expo на процесс проверки Facebook, который автоматически завершится успешно, если (как и многие люди) вы уже вошли в саму Facebook.
Проверка Facebook, в свою очередь, перенаправит процесс входа в Expo обратно в собственный код JavaScript Expo…
…которые бы доверчиво, но ошибочно схватили никогда не проверенные на самом деле returnURL
за его обратный вызов от этой магии ru
cookie, который он установил в начале, без вашего одобрения или ведома.
Неудачное открытие или неудавшееся закрытие?
Как вы можете видеть из описания выше, уязвимость была вызвана некорректным сбоем кода Expo.
Код аутентификации обычно должен сбой закрыт, на жаргоне, что означает, что процесс не должен быть успешным, если не было получено какое-то активное одобрение.
Мы предполагаем, что Экспо не предназначала систему для не открыть, учитывая, что отчет SALT показывает, что его всплывающее диалоговое окно утверждения выглядело следующим образом:
Приложение на https://roguesite.example просит вас войти в свою учетную запись Facebook. Вы полностью доверяете https://roguesite.example и согласны с этим: [Нет] [Да]
Ответ по умолчанию, как и следовало ожидать, был установлен на [No]
, но это приведет к сбою системы только в том случае, если вы неукоснительно использовали собственный клиентский код Expo для управления процессом проверки.
Предоставив свой собственный JavaScript для запуска последовательности запросов проверки, исследователи смогли обработать диалоговое окно утверждения, как если бы оно говорило:
Если вы явно не укажете нам запретить https://roguesite.example вход через вашу учетную запись Facebook, мы позволим ему это сделать: [Разрешить] [Заблокировать]
Решение, среди прочих изменений, заключалось в том, чтобы первоначальный код входа в Expo устанавливал эту магию. ru
печенье только после того, как вы явно одобрили так называемый returnURL
, так что более поздний код входа JavaScript в Expo не будет закрыт, если всплывающее окно подтверждения будет пропущено, вместо того, чтобы слепо доверять URL-адресу, который вы никогда не видели и не одобряли.
Во многом эта ошибка похожа на Умная розетка Belkin Wemo ошибка, о которой мы написали около двух недель назад, несмотря на то, что основной причиной в случае с Belkin было переполнение буфера, а не мошеннический веб-обратный вызов.
Код Белкина выделил 68-байтовый буфер памяти в своем коде на стороне сервера, но полагался на проверку в своем коде на стороне клиента, что вы не пытались отправить более 68 байтов, тем самым оставляя сервер на милость злоумышленников, которые решили общаться с сервером, используя собственный код на стороне клиента, который обходит процесс проверки.
Что делать?
- Сообщая об ошибках и описывая их, рассмотрите возможность использования SALT пример. Раскрывайте информацию ответственно, предоставляя поставщику разумное время для исправления уязвимости, а также разумное время для информирования своих пользователей, прежде чем публиковать подробности, которые позволят кому-либо еще создать собственный эксплойт.
- При получении отчетов об ошибках рассмотрите возможность подписки на Экспо пример. Отвечайте быстро, поддерживайте контакт с автором сообщения об ошибке, исправьте уязвимость как можно скорее, предоставьте полезный отчет о расследовании для своих пользователей и сохраняйте его объективность. (Сопротивляйтесь предложениям вашей маркетинговой команды похвалить себя за «серьезное отношение к безопасности» или отмахнуться от проблемы как от неважной. Это должны решать ваши пользователи, основываясь на оперативности и уместности вашего ответа, а также на их собственной оценке риска.)
- Убедитесь, что ваш код аутентификации не закрыт. Убедитесь, что у вас нет шагов проверки или утверждения, которые можно нейтрализовать, просто проигнорировав или отменив их.
- Никогда не предполагайте, что ваш собственный клиентский код будет контролировать процесс проверки. Предположим, что злоумышленники реконструируют ваш протокол и создадут собственный клиентский код, чтобы обойти как можно больше проверок.
- Выход из веб-аккаунтов, когда вы не используете их активно. Многие люди входят в учетные записи, такие как Google, Amazon, Facebook, Apple и другие, а затем остаются в системе на неопределенный срок, потому что это удобно. Выход из системы предотвращает выполнение многих действий (включая аутентификацию, публикации, лайки, публикации и многое другое), когда вы этого не ожидаете — вместо этого вы увидите запрос на вход.
Не забывайте, что, выходя из веб-служб всякий раз, когда вы можете, и часто очищая все файлы cookie вашего браузера и сохраненные веб-данные, вы также уменьшаете объем отслеживающей информации, которую сайты могут собирать о вас во время просмотра.
В конце концов, если вы не вошли в систему и у вас не осталось отслеживающих файлов cookie, сайты больше не будут точно знать, кто вы и что вы делали в прошлый раз.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- ПлатонАйСтрим. Анализ данных Web3. Расширение знаний. Доступ здесь.
- Чеканка будущего с Эдриенн Эшли. Доступ здесь.
- Покупайте и продавайте акции компаний PREIPO® с помощью PREIPO®. Доступ здесь.
- Источник: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- :имеет
- :является
- :нет
- :куда
- $UP
- 1
- 15%
- 2FA
- a
- в состоянии
- О нас
- выше
- Absolute
- доступ
- Учетная запись
- Учетные записи
- Приобретает
- Действие (Act):
- действия
- активный
- активно
- акты
- добавить
- Добавляет
- совет
- консультировать
- После
- тому назад
- Все
- выделено
- позволять
- позволяет
- в одиночестве
- уже
- причислены
- всегда
- Amazon
- среди
- количество
- an
- и
- Другой
- ответ
- любой
- кто угодно
- все
- приложение
- Apple
- утверждение
- утвердить
- утвержденный
- Программы
- МЫ
- около
- гайд
- AS
- оценки;
- At
- атаковать
- проверять подлинность
- подлинности
- Аутентификация
- автор
- уполномоченный
- разрешение
- автоматический
- автоматически
- избежать
- назад
- фон
- Фоновое изображение
- основанный
- BE
- , так как:
- было
- до
- между
- большой
- слепо
- Заблокировать
- Блог
- граница
- Дно
- брокер
- браузер
- файлы cookie браузера
- буфер
- переполнение буфера
- Ошибка
- ошибки
- но
- by
- призывают
- под названием
- CAN
- случаев
- Привлекайте
- Вызывать
- вызванный
- Центр
- шанс
- изменения
- контроль
- Проверки
- утверждать
- Очистка
- клиент
- закрыто
- облако
- код
- Кодирование
- собирать
- цвет
- приход
- Компания
- Соединительный
- Рассматривать
- обращайтесь
- контроль
- Удобно
- печенье
- печенье
- может
- чехол для варгана
- Создайте
- Полномочия
- криптографический
- Клиенты
- КИБЕРПРЕСТУПНИК
- данным
- решать
- решенный
- По умолчанию
- поставляется
- описание
- желанный
- подробность
- подробнее
- Диалог
- DID
- Digest
- непосредственно
- Раскрывать
- раскрытие
- Принять
- Дисплей
- do
- приносит
- дело
- Дон
- Dont
- дублированный
- редактирование
- еще
- включить
- конец
- Даже
- НИКОГДА
- точно,
- Изучение
- пример
- обмена
- ожидать
- опыт
- объяснены
- Эксплуатировать
- Выставка
- что его цель
- FAIL
- отсутствии
- не удается
- увлекательный
- несколько
- окончательный
- фиксированный
- фиксированной
- после
- следующим образом
- Что касается
- найденный
- часто
- от
- полностью
- в общем
- получить
- Дайте
- данный
- Отдаете
- Go
- идет
- хорошо
- захват
- значительно
- было
- рука
- Ручки
- Управляемость
- произошло
- Случай
- Есть
- высота
- полезный
- здесь
- ЧАСЫ
- зависать
- Как
- How To
- Однако
- HTTPS
- Личность
- if
- в XNUMX году
- in
- В том числе
- косвенно
- информация
- начальный
- вместо
- намереваться
- в
- следственный
- вопрос
- IT
- ЕГО
- саму трезвость
- жаргон
- JavaScript
- всего
- Сохранить
- Основные
- вязать
- Знать
- знания
- известный
- Фамилия
- новее
- уход
- оставил
- такое как
- Listening
- ll
- Войти
- каротаж
- Войти
- дольше
- смотрел
- магия
- сделать
- многих
- много людей
- Маржа
- Маркетинг
- макс-ширина
- смысл
- означает,
- Медиа
- Память
- может быть
- ошибка
- месяцев
- БОЛЕЕ
- много
- Названный
- Необходимость
- необходимый
- никогда
- Новые
- Новости
- нет
- "обычные"
- номер
- OAuth
- цель
- of
- от
- предлагают
- предложенный
- on
- ONE
- онлайн
- только
- открытый
- Опция
- or
- Другое
- Другое
- внешний
- за
- собственный
- упакованный
- параметры
- проходит
- Прохождение
- Пароль
- Патчи
- Патчи
- Пол
- Люди
- Телефон
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- плюс
- Точка
- пунктов
- Популярное
- должность
- возможное
- Блог
- представить
- предотвращает
- частная
- процесс
- Процессы
- Профиль
- Программирование
- протокол
- Доказывать
- обеспечивать
- гласность
- опубликованный
- Издательство
- целей
- Полагая
- быстро
- скорее
- Читать
- на самом деле
- разумный
- получает
- получение
- переориентировать
- уменьшить
- полагаться
- Ответить
- отчету
- репортер
- Reporting
- Отчеты
- Запросы
- требовать
- исследователи
- ответ
- ответственный
- Возвращает
- правую
- Снижение
- корень
- Run
- Сказал
- соль
- довольный
- сообщили
- говорит
- Сцены
- Во-вторых
- безопасно
- безопасность
- маркер безопасности
- посмотреть
- видя
- видел
- видит
- Отправить
- послать
- Последовательность
- серьезный
- обслуживание
- Услуги
- набор
- установка
- Акции
- Короткое
- должен
- Шоу
- подпись
- аналогичный
- упрощенный
- просто
- сайте
- Сайтов
- умный
- So
- Соцсети
- социальные сети
- Сообщения в социальных сетях
- твердый
- Решение
- некоторые
- удалось
- Скоро
- Говоря
- особый
- указанный
- Начало
- оставаться
- Шаги
- хранить
- представленный
- быть успешными
- такие
- поставки
- SVG
- система
- Говорить
- сказать
- говорит
- чем
- который
- Ассоциация
- их
- Их
- тогда
- следовательно
- Эти
- они
- этой
- те
- хоть?
- три
- время
- в
- знак
- Инструментарий
- топ
- Отслеживание
- переход
- прозрачный
- лечить
- пыталась
- вызвать
- срабатывает
- Доверие
- доверие
- стараться
- ОЧЕРЕДЬ
- два
- В конечном счете
- под
- на
- URL
- us
- используемый
- Информация о пользователе
- пользователей
- через
- VALIDATE
- Проверка
- продавец
- проверка
- проверить
- с помощью
- Войти
- посетили
- жизненный
- уязвимость
- хотеть
- законопроект
- Путь..
- способы
- we
- Web
- веб-сервисы
- Вебсайт
- Недели
- пошел
- были
- Что
- когда
- когда бы ни
- который
- КТО
- будете
- в
- без
- бы
- письмо
- Неправильно
- X
- Да
- еще
- являетесь
- ВАШЕ
- себя
- зефирнет