Небезпечне перенаправлення URL-адреси
Справжній домен, реальний логін, потім 302 для зловмисника.
Що таке Небезпечне перенаправлення URL-адреси?
Відкрите перенаправлення надсилає браузер до місця призначення, взятого із запиту, не запитуючи, чи є це місце призначення вашим. Програма нічого не отримує від помилки; зловмисник отримує ваше ім’я хоста, у той момент, коли користувач йому найбільше довіряє. Ви відтворите вхід, який враховує параметр next , і спостерігатимете, як 302 переносить жертву на сторінку входу, подібну до неї. Потім ви виправляєте res.redirect(req.query.next) лише за допомогою відносних шляхів або дозволеного списку імен хостів і бачите, чому startsWith('/') пропускає відносно протоколу //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