Укрепить небезопасное перенаправление, но перенаправляете на себя?

У меня есть проект веб-приложения ASP.NET, который я сканирую с помощью Fortify Source Analyzer v3.1.

Веб-проект содержит ASPX, у которого есть случай, когда он перенаправляет на себя.

Код:

Response.Redirect(Request.Url.ToString());

Fortify классифицирует это как проблему OWASP A10 и CWE/SANS ID 601. Я не понимаю уязвимости — похоже, мы перенаправляем в очень конкретное место… текущий URL.

Почему это считается плохим?

Заранее спасибо.


person Howard Hoffman    schedule 20.10.2011    source источник


Ответы (2)


Не мешало бы проверить правильность данных, выходящих из Request.Url. Я недостаточно знаю о .NET, чтобы отвечать по-настоящему разумно, но часто URL-адреса содержат контент, предоставленный пользователем. Может быть QueryString? Есть ли после него фрагмент (#foo) с дополнительными данными? Является ли часть пути полностью взаимозаменяемой, как в «http://server/search/foo»? Это один из причудливых интернационализированных URL-адресов? и если да, то в каком наборе символов вам возвращается строка? Мог ли удаленный злоумышленник указать другое имя хоста и/или заголовок хоста?

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

person Douglas Held    schedule 03.11.2011
comment
Имеет смысл. Я не рассматривал строку запроса, поэтому в общем случае я согласен, что это не опрометчивое ложное срабатывание. - person Howard Hoffman; 05.11.2011

В общем, SCA ищет ЛЮБЫЕ непроверенные данные, поступающие от пользователя, которые никак не проверены и используются напрямую. Шаблон, которому он соответствовал, видел данные, поступающие в Request.Url.ToString(), а затем использовал Response.Redirect(*). Конкретный источник, скорее всего, не имеет значения в этом случае; только данные, предоставленные пользователем, не были проверены при их использовании.

Если бы вы могли предоставить RuleID, я мог бы дать вам более конкретный ответ.

person LaJmOn    schedule 21.10.2011
comment
Идентификатор правила A232C1F9-8B44-43A4-89DE-835653DC5803. Реально, в духе жесткости... сможет ли пользователь или что-то сделать Request.Url чем-то, что не является этой самой страницей? Я полагаю, можно было бы убедиться, что Path of the Request.Url был каким-то жестко запрограммированным значением (делая утверждение, что имя файла кода во время сборки... является именем страницы ASPX во время выполнения), и я предполагаю это удовлетворило бы SCA... или конкретный шаблон всегда является ложным срабатыванием? Заранее спасибо. - person Howard Hoffman; 22.10.2011