December 14

Объяснение уязвимостей сеансового взлома [Complete web app pentesting series #17]

Введение

Представьте, что вы перестали сдавать ключ-карту от офиса, но она по-прежнему открывает здание спустя несколько месяцев. Именно в этом заключается обход истечения сеанса входа в Facebook в приложении Facebook Creator. Несмотря на то, что пользователи выходили из системы со всех устройств или меняли пароли, злоумышленники могли пользоваться постоянным доступом — загружать или удалять посты, отправлять сообщения подписчикам до бесконечности. Это была уязвимость, связанная с сохранением сеанса, а не с кражей сеанса. У вас было несколько функций, при которых приложение отображало сообщение «Сеанс истек», но на самом деле закрывало на это глаза. Поле игры было таким для предприятий и создателей контента, ставки были невероятно высоки: если кто-то подвергался взлому с помощью скомпрометированной учетной записи, это могло привести к саботажу бренда, финансовым потерям или, как вы понимаете, ущербу репутации.

Разбор конкретных примеров

Пример из практики 1: Обход истечения сеанса в приложении Facebook Creator

Бесконечная сессия: как уязвимость Facebook позволила хакерам оставаться в системе навсегда (и почему выхода из системы не всегда достаточно)
Тип уязвимости: Обход срока действия сессии с помощью очереди автономных действий

Последствия: Злоумышленники могли сохранять постоянный доступ к учетным записям даже после смены пароля или принудительного выхода из системы.

Значение: Эта уязвимость превратила функцию «выход из всех устройств» в плацебо, подорвав доверие пользователей к важным средствам контроля безопасности.

Награда за обнаружение уязвимости: 2500 долларов

Отчет

Объяснение уязвимости: когда «выход из системы» не означает «блокировка доступа»

Представьте, что вы уволили сотрудника, но он продолжает работать, потому что его компьютер не получил соответствующее уведомление. Именно это и произошло в данном случае. Facebook Creator Studio — инструмент для управления страницами — не смог полностью аннулировать сеансы, что позволило злоумышленникам остаться и подделать сеансы. ==Сеансы похожи на временные пропуска: они должны немедленно истекать при отмене. Но в данном случае приложение Facebook Creator App рассматривало прекращение сеанса как рекомендацию, а не как правило.==

Процесс эксплуатации: взлом в темноте

Шаг 1: Момент «А что, если?»

Аджай (охотник за головами) подумал про себя: «А что, если выход из всех сессий на самом деле не отключает его?» Его мысль: функции безопасности обычно сосредоточены на отображении приятной обратной связи в пользовательском интерфейсе, но предпочитают последовательность в бэкэнде.

Шаг 2: Два устройства, одна ловушка

  • Устройство A (ноутбук): Вошел в Facebook Creator Studio.
  • Устройство B (телефон): Также онлайн.
  • **Выход из системы Triggeredilimn: С устройства A он вышел из всех активных сессий.
  • Ответ устройства B: Показал «сессия истекла», но...

Шаг 3: Трюк с режимом «В самолете»

  • Отключите Wi-Fi/мобильные данные на устройстве B.
  • Перезапустите приложение (все еще в автономном режиме).
  • Создайте пост, нажмите кнопку «Опубликовать» (одновременно).
  • Восстановите интернет: пост загрузится на серверы Facebook.

Креативный поворот:

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

Смягчение последствий:

Серверные переключатели сеансов: аннулируйте сеансы глобально, а не только в пользовательском интерфейсе.

Проверка перед синхронизацией: проверяйте статус сеанса перед выполнением очереди действий.

Принудительная повторная аутентификация: запрашивайте вход в систему для действий с высоким риском после сбоя сети.

Совет от профессионала: используйте Burp Suite для захвата и повторного воспроизведения запросов после выхода из системы.

Оставайтесь скептичными, тестируйте в автономном режиме и помните: сессии могут преследовать вас. 👻

Пример из практики 2: Когда опечатка приводит к обнаружению золотой жилы

Взлом Uber одним ударом: трюк XSS, который украл сессии Facebook

  • Тип уязвимости: Межсайтовый скриптинг (XSS), приводящий к краже токена сеанса Facebook.
  • Последствия: Полный захват учетной записи с помощью украденных учетных данных Facebook.
  • Значение: Цепная реакция небольших недостатков — обойденные фильтры, слабый CSP и неправильно настроенные ACL — превратила незначительную ошибку в критический эксплойт.
  • Награда за обнаружение: 1500 долларов США.

Отчет

Описание уязвимости: цепочка с API Facebook для кражи токенов

Представьте себе, что вор проникает в здание через разбитое окно и обнаруживает ключи от сейфа. Именно это и произошло в данном случае. Один неправильно настроенный конечный узел Uber в сочетании с плохой защитой позволил хакерам захватить сеансы Facebook — причиной этого стало отсутствие косой черты и недосмотр, связанный с регистром символов.

XSS похож на подделку, помещенную в почтовый ящик: злоумышленники внедряют вредоносные скрипты в материалы более качественных веб-сайтов, которые более склонны обрабатывать их, чем браузеры. В данном случае конечная точка поиска блога Uber (/es-CL/blog/santiago/search/) также была уязвима для проблем с очисткой пользовательского ввода.

Процесс эксплуатации:

Шаг 1: Полуночная охота

Чувствуя, что застрял в поиске ошибок, исследователь в 2:00 ночи переключился на Uber. Брутфорс-атака на конечные точки привела его к странице поиска блога. Его идея: «Статические сайты обычно скрывают неиспользуемые функции. Давайте попробуем».

Шаг 2: Обход фильтра

Первоначальные XSS-нагрузки не сработали. Но настойчивость окупилась. Вот как автор пришел к этой нагрузке:

URL Encoder API let HTML tags to be passed like `<` and `>`, but forbid the `/` character and the word "script"; Encoding the slash as `%2f` and changing cases (e.g., `scripT`) to avoid those filters, the researcher managed to get around the algorithm. This allowed decrypting arbitrary JavaScript—to finally steal Facebook tokens which belonged to Uber user’s account.
  • Обход 1: Marianobit steeper %2f вместо /, чтобы избежать блокировки ключевых слов.
  • Обход 2: Используйте смешанный регистр <scripT>, чтобы обойти фильтры, чувствительные к регистру.

Конечная полезная нагрузка:

<%fscripT><script>confirm(document.domain)<%2fscripT>

Это запустило Javascript, который доказал наличие уязвимости.

Шаг 3. Переход к краже токенов Facebook

На конференции хакеров один из партнеров предложил идею привязки XSS к API Facebook. Суть:

«Uber принимает идентификаторы Facebook. Если мы сможем получить токены, то станем владельцами учетной записи».

Последний JavaScript, использованный злоумышленником, выглядит примерно так:

Цепочка атак:

  • Привлечь жертву на вредоносную страницу, содержащую XSS.
  • Запустить JavaScript для кражи токенов с помощью FB.getLoginStatus() Facebook.
  • Обход CSP: неправильно настроенная политика безопасности контента Uber доверяла внешним скриптам.

Креативный поворот:

Процесс входа в систему Uber был разделен между www.uber.com (статический сайт) и auth.uber.com (аутентификация). XSS на статическом сайте по-прежнему мог взаимодействовать с авторизованными пользователями — это была большая ошибка.

Смягчение последствий:

  • Бескомпромиссно очищайте вводные данные: применяйте широкий спектр всех специальных символов HTML, за исключением тех, которые явно разрешены.
  • Köprü CSP: script-src 'self' engelJosBu_scripts.
  • Разделяйте аутентификацию как особые случаи: выделяйте логику входа в систему отдельно от статического контента.

Как найти такие уязвимости в реальном мире?

  • **Забытая страница Fuzz: Burp Suite o manualizzarsi.
  • Играйте с фильтрами: кодирование Entreprise, замена регистра или жестокий синтаксис.
  • Мыслите нестандартно: всегда спрашивайте себя: «С чем я могу связать эту уязвимость?»

Заключение

Уязвимость любой системы безопасности проистекает из ее слабого места, поскольку приложение Facebook Creator App продемонстрировало такую слабость. Обход систем безопасности происходит, когда разработчики предпочитают включать удобные для пользователя функции вместо фундаментальных мер безопасности.

  • Уязвимость приложения Facebook Creator App указывает на несколько важных уроков, которые мы должны извлечь из этого.
  • Визуальное подтверждение выхода из системы вводит пользователей в заблуждение, поскольку не приводит к эффективному завершению сеансов на сервере.
  • Для обеспечения безопасности необходимо, чтобы функции автономной работы требовали от пользователей повторной аутентификации при повторном подключении к сетевым службам.
  • Каждая функция должна пройти полное тестирование в различных конфигурациях подключения, которые проверяют слабые места системы в условиях нестабильной беспроводной сети.

Специалисты по безопасности должны внедрять не только услуги по проверке кода, но и использовать zettachrisity, которая требует проверки на стороне сервера перед предоставлением доступа к сеансу. Электронные хакеры постоянно используют эти уязвимости, нацеливаясь на автономные системы очередей, поскольку они содержат больше слабых мест в плане доступности, чем сложные защищенные системы.

Оригинальная статья | Перевод THREAD