Незахищене перенаправлення URL
Справжній домен, справжній вхід, а потім 302 на сторінку зловмисника.
Що таке Незахищене перенаправлення URL?
Відкрите перенаправлення спрямовує браузер на адресу із запиту й не з'ясовує, чи вона ваша. Застосунок із цієї вади нічого не отримує, а зловмисник отримує ваше ім'я хоста в мить, коли користувач довіряє йому найбільше. Ви повторите вхід, який виконує перенаправлення за параметром next , і побачите, як відповідь 302 приводить жертву на схожу сторінку входу. Потім виправите res.redirect(req.query.next) , залишивши лише відносні шляхи або список дозволених імен хостів, і з'ясуєте, чому startsWith('/') безперешкодно пропускає URL без протоколу виду //host .
Що ви дізнаєтесь у Незахищене перенаправлення URL
- Розпізнавайте відкрите перенаправлення як прискорювач фішингу: зловмисник позичає справжнє ім'я хоста, щоб здобути довіру
- Розумійте, що URL без протоколу (<code>//host</code>) проходять наївні перевірки <code>startsWith("/")</code> і їх потрібно блокувати окремо
- Застосовуйте перевірку, яка пропускає лише відносні шляхи (або список дозволених імен хостів, якщо зовнішні перенаправлення справді потрібні)
- Відрізняйте відкрите перенаправлення від SSRF: зловмисник спрямовує браузер, а не сервер, і наслідок — переконливість фішингу, а не доступ до внутрішньої мережі
- Перевіряйте кожен <code>res.redirect</code>, <code>location.href</code> і відповідь <code>302 Location</code>, ціль якої виводиться з даних запиту
Незахищене перенаправлення URL — Кроки навчання
-
Оцініть ціль
Сьогодні Боб полює на облікові записи Fernloft. Це персональний хмарний сервіс, тож в одному обліковому записі зберігається все життя людини: фото, податкові документи, скани посвідчень особи, резервні копії. Чужих паролів у нього немає, тому він планує вивчити зсередини, як працює вхід. Зареєструватися у Fernloft може будь-хто, тож Боб починає зі сторінки реєстрації.
-
Створіть одноразовий обліковий запис
Спершу йому потрібен власний обліковий запис для перевірок, який не веде назад до нього. Він вводить одноразову адресу й пароль і створює обліковий запис.
-
Прочитайте адресу сторінки входу
Обліковий запис створено, і Боб потрапляє на сторінку входу. Перш ніж увійти, він читає адресний рядок. Посилання для входу містить значення redirect_to (зараз це /home ), і воно визначає, куди застосунок спрямовує браузер після успішного входу.
-
Увійдіть і простежте, куди вас спрямує
Тепер Боб входить у свій одноразовий обліковий запис і стежить, куди застосунок спрямовує браузер, щойно пароль прийнято.
-
Створіть шкідливе посилання
Боб складає те саме посилання для входу, але замінює значення redirect_to : замість /home там тепер адреса сторінки, що належить йому. Він змінює в адресному рядку лише це одне значення, щоб перевірити, чи виконає застосунок адресу поза сайтом так само, як виконав /home .
-
Відкрите перенаправлення підтверджено
Боб входить на справжній сторінці Fernloft зі своїм одноразовим обліковим записом. Облікові дані справжні, тож вхід вдається, а потім застосунок читає підготовлене Бобом значення redirect_to , щоб вирішити, куди спрямувати браузер.
-
Підготуйте посилання до атаки
Боб загортає підготовлене посилання для входу в повідомлення, на яке відреагував би будь-хто: попередження про завершення сесії. Він бере адреси електронної пошти користувачів Fernloft із дампа витоку даних і розсилає те саме посилання всім. Далі ми стежимо за одним із одержувачів — Алісою.
-
Попередження про ваш обліковий запис
Після роботи Аліса заглядає у свою особисту пошту. Там лист від Fernloft: її сесія завершилася, і щоб зберегти файли, їй потрібно підтвердити особу. Вона користується Fernloft для всього, тож утрата доступу була б справжнім клопотом.
-
Перейдіть за посиланням
Посилання веде на account.fernloft.com — справжню адресу Fernloft, тож Аліса переходить за ним, як зробив би будь-хто.
-
Справжня сторінка входу
Посилання відкриває справжню сторінку входу 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