Azure Front Door WAF блокирует .AspNet.ApplicationCookie
Мне интересно, была ли у кого-нибудь еще эта проблема с Azure Front Door и брандмауэром веб-приложений Azure и есть ли решение.
WAF блокирует простые запросы GET к нашему веб-приложению ASP.NET. Срабатывает правило DefaultRuleSet-1.0-SQLI-942440 Обнаружена последовательность комментариев SQL.
Единственное место, где я могу найти последовательность комментариев sql, - это файл.AspNet.ApplicationCookie в соответствии с этим усеченным примером: RZI5CL3Uk8cJjmX3B8S-q0ou-OO-bctU5sx8FhazvyvfAH7wH. Если я удалю два дефиса "-" в значении cookie, запрос успешно пройдет через брандмауэр. Как только я добавляю их обратно, запрос блокируется тем же правилом брандмауэра.
Вроде у меня 2 варианта. Отключите правило (или измените его с "Блокировать" на "Журнал"), чего я не хочу, или измените значение.AspNet.ApplicationCookie, чтобы оно не содержало никакого текста, который может вызвать срабатывание правила брандмауэра. Файл cookie создается библиотекой Microsoft.Owin.Security.Cookies, и я не уверен, что могу изменить способ его создания.
4 ответа
Я столкнулся с той же проблемой.
Если вы посмотрите на значение cookie: RZI5CL3Uk8cJjmX3B8S-q0ou--OO--bctU5sx8FhazvyvfAH7wH
их две - это потенциально опасная команда SQL, которая может закомментировать вашу команду SQL, которую вы собираетесь запросить. Злоумышленник может запустить свою команду вместо вашей - после того, как закомментировал ваш запрос.
Но, очевидно, этот cookie не будет запускать никаких запросов на стороне SQL, и мы уверены в этом. Таким образом, мы можем создавать исключения из правил, которые не будут выполняться при определенных условиях.
Перейдите в свой WAF > нажмите "Управляемые правила" в левой колонке> нажмите "Управление исключениями" вверху> и нажмите "Добавить".
В вашем случае можно добавить это правило:
Переменная соответствия: запрос имени файла cookie Оператор: запускается с помощью селектора: .AspNet.ApplicationCookie
Однако я использую Asp.Net Core 3.1 и Asp.Net Core Identity. Я столкнулся и с другими проблемами, такими как __RequestVerificationToken.
Вот мой полный список исключений. Я надеюсь, что это помогает.
PS Думаю, на данный момент есть глюк. Если у вас есть ограничение IP-адресов в вашей среде, например UAT, из-за этих исключений брандмауэр веб-приложений обходит ограничение IP, и ваш сайт UAT становится открытым для общественности, даже если у вас все еще есть настраиваемое правило ограничения IP-адресов на вашем WAF.
Я столкнулся с чем-то похожим и написал об этом здесь: Входная дверь неполный первый запрос.
Чтобы проверить это, я создал веб-приложение и разместил его за службой Front Door. В этом тестовом приложении я перебираю все свойства
HttpContext.HttpRequest
и распечатайте их. Насколько я вижу прямо сейчас, есть два свойства, которые имеют различия между прямым запросом и запросом через парадную дверь. ОбаAcceptTypes
иUserLanguages
для запросов Front Door пусто, тогда как при прямом доступе к тестовой программе они заполняются полностью.Я не совсем уверен, в чем причина того, что первый запрос парадной двери отличается от прямого запроса. Это ошибка? Это преднамеренно, и если да, то почему? Или это потому, что Front Door разработан с использованием фреймворка, который не поддерживает эти свойства, поскольку при перенаправлении они пусты?
К сожалению, я не нашел решения проблемы, но ответить на вопрос, если кто - то испытывает: я сделал опыт что - то подобное.
Я столкнулся с этой проблемой, но токен передавался через запрос запроса, а не через файл cookie. В случае, если это может кому-то помочь, для указанного хоста мне пришлось разрешить с помощью специального правила выполнение регулярного выражения в RequestUri, используя следующее регулярное выражение (взято из исходного управляемого правила):
:\/\\\\*!?|\\\\*\/|[';]--|--[\\\\s\\\\r\\\\n\\\\v\\\\f]|--[^-]*?-|[^\\u0026-]#.*?[\\\\s\\\\r\\\\n\\\\v\\\\f]|;?\\\\x00
Кажется, что файл cookie был поврежден, так как я сравнивал поля, которые существовали до этого, с исправным файлом cookie, я предполагаю, что где-то в содержимом поля оно интерпретируется как оператор усечения sql и, вероятно, запускает правило. Еще предстоит определить, правда ли это и / или чем это вызвано.