Дослідники з компанії безпеки веб-кодування SALT щойно опублікували захоплюючий опис того, як вони знайшли помилка автентифікації охрестили CVE-2023-28131 у популярному онлайн-наборі інструментів для створення програм, відомому як Expo.
Доброю новиною є те, що Експо відповів дуже швидко до звіту про помилку SALT, придумавши виправлення всього за кілька годин після відповідального розкриття SALT.
На щастя, виправлення не покладалося на те, що клієнти завантажують що-небудь, оскільки виправлення було реалізовано в хмарній службі Expo і не потребувало виправлень для будь-яких попередньо встановлених програм або коду на стороні клієнта.
Експо консультативний не лише пояснив, що трапилось і як компанія це виправила, а й запропонував своїм клієнтам поради щодо програмування щодо того, як уникнути такої можливої вразливості в інших онлайн-сервісах.
Тоді SALT чекав три місяці, перш ніж опублікувати свій звіт, замість того, щоб поспішно оприлюднити його з метою реклами якомога швидше, таким чином даючи користувачам Expo можливість переварити відповідь Expo та вжити відповідних заходів.
Зберігати це просто
Процес автентифікації з помилками детально описано в Звіт СОЛ, але ми представимо тут дуже спрощений опис того, що пішло не так у службі OAUTH Expo.
ОАВТ, скорочено Відкрита структура авторизації, це процес, який дозволяє вам отримати доступ до особистих даних в онлайн-службі (наприклад, редагування вашого онлайн-профілю, додавання нової статті в блозі або схвалення веб-служби для публікації публікацій у соціальних мережах для вас), не встановлюючи пароль за допомогою або ввійти безпосередньо в саму службу.
Коли ви бачите веб-послуги, які пропонують вам a Увійдіть за допомогою 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-адресу, на яку буде надіслано останній магічний маркер безпеки для надання доступу.
- Перш ніж буде доставлено маркер безпеки, спливаюче вікно попросить вас підтвердити URL-адресу, яку збираються авторизувати, щоб ви могли виявити будь-кого, хто намагається замінити фіктивну URL-адресу в процесі входу.
- Якщо ви схвалите спливаюче вікно, Expo перенаправляє вас до процесу перевірки Facebook.
- Якщо Facebook схвалить перевірку, він повертає магічний маркер доступу до служби Expo, а Expo передає його на URL-адресу, яку ви щойно схвалили у спливаючому вікні, яке називається
returnURL
. - Додаток або веб-сайт, які прослуховують вказаний
returnURL
отримує зворотний дзвінок Expo, отримує маркер доступу, а тому проходить автентифікацію як ви.
На жаль, дослідники SALT виявили, що вони можуть зірвати процес входу, використовуючи код JavaScript, щоб запустити доступ до початкової URL-адреси входу в Expo, але потім знищити спливаюче вікно перевірки, перш ніж ви встигнете його прочитати або підтвердити самостійно.
Однак на цьому етапі служба Expo вже встановила файл cookie з назвою ru
(скорочено для returnURL
), щоб вказати, куди передзвонити, за допомогою вашого магічного маркера доступу в кінці.
Це означало, що кіберзлочинець міг обманом змусити код Expo «запам’ятати» a returnURL
такий як https://roguesite.example
, без того, щоб ви взагалі побачили діалогове вікно з попередженням про атаку, не кажучи вже про її помилкове схвалення.
Потім дослідники використали другий фрагмент коду JavaScript, щоб змоделювати перенаправлення Expo на процес перевірки Facebook, який автоматично завершився б успішно, якщо (як і багато людей) ви вже ввійшли в сам Facebook.
Перевірка Facebook, у свою чергу, перенаправить процес входу в Expo назад у власний JavaScript-код Expo…
…які довірливо, але помилково схопили б ніколи фактично перевірене returnURL
для зворотного виклику від цієї магії ru
файли cookie, встановлені на початку без вашого дозволу чи відома.
Не відкривається чи не закривається?
Як видно з опису вище, вразливість була спричинена неналежним збоєм коду Expo.
Код автентифікації, як правило, повинен помилка закрита, на жаргоні означає, що процес не має бути успішним, якщо не буде повідомлено про активне схвалення.
Ми припускаємо, що Expo не планувала систему невдало відкрити, враховуючи, що звіт SALT показує, що спливаюче діалогове вікно затвердження виглядало так:
Програма за адресою https://roguesite.example просить вас увійти у свій обліковий запис Facebook. Чи повністю ви довіряєте https://roguesite.example і погоджуєтеся це дозволити: [Ні] [Так]
Типовою відповіддю, як і слід було очікувати, було встановлено значення [No]
, але це призведе до збою в закритті системи, лише якщо ви вірно використовуєте власний клієнтський код Expo для керування процесом перевірки.
Забезпечивши власний JavaScript для виконання послідовності запитів на перевірку, дослідники змогли розглядати діалогове вікно затвердження так, ніби воно говорить:
Якщо ви явно не скажете нам заблокувати https://roguesite.example доступ до системи через ваш обліковий запис Facebook, ми дозволимо це зробити: [Дозволити] [Блокувати]
Рішення, серед інших змін, полягало в тому, щоб початковий код входу в Expo встановив цю магію ru
cookie лише після того, як ви явно схвалите т.зв returnURL
, щоб пізніший код входу в JavaScript Expo не закривався, якщо спливаюче вікно підтвердження було пропущено, замість того, щоб сліпо довіряти URL-адресі, яку ви ніколи не бачили й не схвалювали.
Багато в чому цей баг схожий на Belkin Wemo Smart Plug помилка, про яку ми писали два тижні тому, незважаючи на те, що основною причиною у випадку Бєлкіна було переповнення буфера, а не шахрайський зворотній виклик у мережі.
Код Бєлкіна виділив 68-байтний буфер пам’яті у своєму серверному коді, але покладався на перевірку клієнтського коду, щоб ви не намагалися надіслати більше 68 байт, таким чином залишаючи сервер на милість зловмисників, які вирішили спілкуватися з сервером за допомогою власного коду на стороні клієнта, який обійшов процес перевірки.
Що ж робити?
- Коли ви повідомляєте та записуєте помилки, розглянути такі SALT приклад. Розкривайте інформацію відповідально, надаючи постачальнику достатній час для усунення вразливості, а також достатній час для консультування власних користувачів, перш ніж публікувати інформацію, яка дозволить будь-кому іншому створити власний експлойт.
- Отримавши повідомлення про помилки, слідкуйте за Expo приклад. Швидко відповідайте, підтримуйте зв’язок з тим, хто повідомив про помилку, виправляйте вразливість якнайшвидше, надайте своїм користувачам корисний звіт про розслідування та зберігайте його об’єктивність. (Проти пропозицій вашої маркетингової команди хвалити себе за «серйозне ставлення до безпеки» або відкидати проблему як неважливу. Це вирішують ваші користувачі, виходячи з оперативності та актуальності вашої відповіді та власної оцінки ризику.)
- Переконайтеся, що ваш код автентифікації не закривається. Переконайтеся, що у вас немає етапів перевірки чи затвердження, які можна нейтралізувати, просто проігнорувавши або скасувавши їх.
- Ніколи не припускайте, що ваш власний клієнтський код контролюватиме процес перевірки. Припустімо, що зловмисники перепроектують ваш протокол і створять власний код клієнта, щоб обійти якомога більше перевірок.
- Вихід із веб-акаунтів, коли ви ними активно не користуєтеся. Багато людей входять в такі облікові записи, як Google, Amazon, Facebook, Apple та інші, а потім залишаються в системі на невизначений час, тому що це зручно. Вихід запобігає виконанню багатьох дій (зокрема автентифікації, публікацій, оцінок "подобається", поширення та багато іншого), коли ви їх не очікуєте - замість цього ви побачите підказку для входу.
Не забувайте, що виходячи з веб-служб, коли це можливо, і часто видаляючи всі файли cookie веб-переглядача та збережені веб-дані, ви також зменшуєте кількість інформації про відстеження, яку сайти можуть збирати про вас під час перегляду.
Зрештою, якщо ви не ввійшли в систему та не маєте жодних файлів cookie для відстеження, які залишилися раніше, сайти більше не знатимуть точно, хто ви є або що ви робили під час останнього відвідування.
- Розповсюдження контенту та PR на основі SEO. Отримайте посилення сьогодні.
- PlatoAiStream. Web3 Data Intelligence. Розширення знань. Доступ тут.
- Карбування майбутнього з Адріенн Ешлі. Доступ тут.
- Купуйте та продавайте акції компаній, які вийшли на IPO, за допомогою PREIPO®. Доступ тут.
- джерело: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- : має
- :є
- : ні
- :де
- $UP
- 1
- 15%
- 2FA
- a
- Здатний
- МЕНЮ
- вище
- абсолют
- доступ
- рахунки
- Рахунки
- Набуває
- Діяти
- дії
- активний
- активно
- акти
- додати
- Додає
- рада
- радити
- після
- назад
- ВСІ
- виділено
- дозволяти
- дозволяє
- тільки
- вже
- Також
- завжди
- Amazon
- серед
- кількість
- an
- та
- Інший
- відповідь
- будь-який
- будь
- все
- додаток
- Apple
- твердження
- схвалювати
- затверджений
- додатка
- ЕСТЬ
- навколо
- стаття
- AS
- оцінка
- At
- атака
- перевіряти справжність
- автентифіковано
- Authentication
- автор
- уповноважений
- авторизації
- автоматичний
- автоматично
- уникнути
- назад
- фон
- фонове зображення
- заснований
- BE
- оскільки
- було
- перед тим
- між
- Великий
- сліпо
- Блокувати
- Блог
- border
- дно
- брокер
- браузер
- файли cookie браузера
- буфера
- переповнення буфера
- Помилка
- помилки
- але
- by
- call
- званий
- CAN
- випадок
- Залучайте
- Викликати
- викликаний
- Центр
- шанс
- Зміни
- контроль
- Перевірки
- стверджувати
- Очищення
- клієнт
- закрито
- хмара
- код
- Кодування
- збирати
- color
- майбутній
- компанія
- З'єднувальний
- Вважати
- контакт
- контроль
- Зручний
- cookie
- печиво
- може
- обкладинка
- створювати
- Повноваження
- криптографічні
- Клієнти
- КІБЕРЗЛОЧИНЦІВ
- дані
- вирішувати
- вирішене
- дефолт
- поставляється
- description
- бажаний
- деталь
- деталі
- Діалог
- DID
- Digest
- безпосередньо
- Розкрити
- розкриття
- відхиляти
- дисплей
- do
- робить
- справи
- Дон
- Не знаю
- охрестили
- редагування
- ще
- включіть
- кінець
- Навіть
- НІКОЛИ
- точно
- Вивчення
- приклад
- обмін
- очікувати
- досвід
- пояснені
- Експлуатувати
- Експо
- FAIL
- відсутності
- зазнає невдачі
- захоплюючий
- кілька
- остаточний
- виправляти
- фіксованою
- після
- слідує
- для
- знайдений
- часто
- від
- повністю
- в цілому
- отримати
- Давати
- даний
- дає
- Go
- йде
- добре
- захоплення
- значно
- було
- рука
- Ручки
- Обробка
- сталося
- Відбувається
- Мати
- висота
- корисний
- тут
- ГОДИННИК
- hover
- Як
- How To
- Однак
- HTTPS
- Особистість
- if
- реалізовані
- in
- У тому числі
- побічно
- інформація
- початковий
- замість
- мати намір
- в
- слідчий
- питання
- IT
- ЙОГО
- сам
- жаргон
- JavaScript
- просто
- тримати
- ключ
- в'язати
- Знати
- знання
- відомий
- останній
- пізніше
- догляд
- залишити
- як
- Прослуховування
- ll
- увійшли
- каротаж
- Логін
- довше
- подивився
- магія
- зробити
- багато
- багато людей
- Маржа
- Маркетинг
- макс-ширина
- сенс
- означав
- Медіа
- пам'ять
- може бути
- помилка
- місяців
- більше
- багато
- Названий
- Необхідність
- необхідний
- ніколи
- Нові
- новини
- немає
- нормальний
- номер
- oauth
- мета
- of
- від
- пропонувати
- запропонований
- on
- ONE
- онлайн
- тільки
- відкрити
- варіант
- or
- Інше
- інші
- з
- над
- власний
- упакований
- параметри
- проходить
- Проходження
- Пароль
- пластир
- Патчі
- Пол
- Люди
- телефон
- plato
- Інформація про дані Платона
- PlatoData
- плюс
- точка
- точок
- популярний
- положення
- це можливо
- Пости
- представити
- запобігає
- приватний
- процес
- процеси
- профіль
- Програмування
- протокол
- Доведіть
- забезпечувати
- гласність
- опублікований
- Видавничий
- цілей
- Поклавши
- швидко
- швидше
- Читати
- насправді
- розумний
- отримує
- отримання
- переадресовувати
- зменшити
- покладатися
- відповісти
- звітом
- репортер
- Звітність
- Звіти
- запитів
- вимагати
- Дослідники
- відповідь
- відповідальний
- Умови повернення
- право
- Risk
- корінь
- прогін
- Зазначений
- сіль
- Незадоволений
- say
- говорить
- сцени
- другий
- безпечно
- безпеку
- токен безпеки
- побачити
- бачачи
- бачив
- бачить
- послати
- посланий
- Послідовність
- серйозний
- обслуговування
- Послуги
- комплект
- установка
- акції
- Короткий
- Повинен
- Шоу
- підпис
- аналогічний
- спрощений
- просто
- сайт
- сайти
- розумний
- So
- соціальна
- соціальні медіа
- Повідомлення в соціальних мережах
- solid
- рішення
- деякі
- що в сім'ї щось
- Скоро
- розмова
- спеціальний
- зазначений
- старт
- залишатися
- заходи
- зберігати
- представлений
- процвітати
- такі
- поставки
- SVG
- система
- балаканина
- сказати
- розповідає
- ніж
- Що
- Команда
- їх
- Їх
- потім
- отже
- Ці
- вони
- це
- ті
- хоча?
- три
- час
- до
- знак
- Інструментарій
- топ
- Відстеження
- перехід
- прозорий
- лікувати
- намагався
- викликати
- спрацьовує
- Довіряйте
- довірливий
- намагатися
- ПЕРЕГЛЯД
- два
- Зрештою
- при
- на
- URL
- us
- використовуваний
- користувач
- користувачі
- використання
- ПЕРЕВІР
- перевірка достовірності
- продавець
- перевірка
- перевірити
- через
- візит
- visited
- життєво важливий
- вразливість
- хотіти
- було
- шлях..
- способи
- we
- Web
- веб-сервіси
- веб-сайт
- тижня
- пішов
- були
- Що
- коли
- коли б ні
- який
- ВООЗ
- волі
- з
- в
- без
- б
- лист
- Неправильно
- X
- так
- ще
- ви
- вашу
- себе
- зефірнет