Незахищене перенаправлення URL

Незахищене перенаправлення URL

Справжній домен, справжній вхід, а потім 302 на сторінку зловмисника.

Що таке Незахищене перенаправлення URL?

Відкрите перенаправлення спрямовує браузер на адресу із запиту й не з'ясовує, чи вона ваша. Застосунок із цієї вади нічого не отримує, а зловмисник отримує ваше ім'я хоста в мить, коли користувач довіряє йому найбільше. Ви повторите вхід, який виконує перенаправлення за параметром next , і побачите, як відповідь 302 приводить жертву на схожу сторінку входу. Потім виправите res.redirect(req.query.next) , залишивши лише відносні шляхи або список дозволених імен хостів, і з'ясуєте, чому startsWith('/') безперешкодно пропускає URL без протоколу виду //host .

Що ви дізнаєтесь у Незахищене перенаправлення URL

Незахищене перенаправлення URL — Кроки навчання

  1. Оцініть ціль

    Сьогодні Боб полює на облікові записи Fernloft. Це персональний хмарний сервіс, тож в одному обліковому записі зберігається все життя людини: фото, податкові документи, скани посвідчень особи, резервні копії. Чужих паролів у нього немає, тому він планує вивчити зсередини, як працює вхід. Зареєструватися у Fernloft може будь-хто, тож Боб починає зі сторінки реєстрації.

  2. Створіть одноразовий обліковий запис

    Спершу йому потрібен власний обліковий запис для перевірок, який не веде назад до нього. Він вводить одноразову адресу й пароль і створює обліковий запис.

  3. Прочитайте адресу сторінки входу

    Обліковий запис створено, і Боб потрапляє на сторінку входу. Перш ніж увійти, він читає адресний рядок. Посилання для входу містить значення redirect_to (зараз це /home ), і воно визначає, куди застосунок спрямовує браузер після успішного входу.

  4. Увійдіть і простежте, куди вас спрямує

    Тепер Боб входить у свій одноразовий обліковий запис і стежить, куди застосунок спрямовує браузер, щойно пароль прийнято.

  5. Створіть шкідливе посилання

    Боб складає те саме посилання для входу, але замінює значення redirect_to : замість /home там тепер адреса сторінки, що належить йому. Він змінює в адресному рядку лише це одне значення, щоб перевірити, чи виконає застосунок адресу поза сайтом так само, як виконав /home .

  6. Відкрите перенаправлення підтверджено

    Боб входить на справжній сторінці Fernloft зі своїм одноразовим обліковим записом. Облікові дані справжні, тож вхід вдається, а потім застосунок читає підготовлене Бобом значення redirect_to , щоб вирішити, куди спрямувати браузер.

  7. Підготуйте посилання до атаки

    Боб загортає підготовлене посилання для входу в повідомлення, на яке відреагував би будь-хто: попередження про завершення сесії. Він бере адреси електронної пошти користувачів Fernloft із дампа витоку даних і розсилає те саме посилання всім. Далі ми стежимо за одним із одержувачів — Алісою.

  8. Попередження про ваш обліковий запис

    Після роботи Аліса заглядає у свою особисту пошту. Там лист від Fernloft: її сесія завершилася, і щоб зберегти файли, їй потрібно підтвердити особу. Вона користується Fernloft для всього, тож утрата доступу була б справжнім клопотом.

  9. Перейдіть за посиланням

    Посилання веде на account.fernloft.com — справжню адресу Fernloft, тож Аліса переходить за ним, як зробив би будь-хто.

  10. Справжня сторінка входу

    Посилання відкриває справжню сторінку входу Fernloft. В адресному рядку — справжній домен із https, усе виглядає правильно, і в цю мить Аліса вирішує довіритися сторінці.

Охоплення стандартів безпеки

OWASP Top 10

  • A01:2025 Broken Access Control
  • A01:2021 Broken Access Control

CWE

  • CWE-601 URL Redirection to Untrusted Site ('Open Redirect')

CIS Controls

  • CIS 16 Application Software Security

NIST CSF

  • PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
  • PR.PS Platform Security