GWT RPC - Достаточно ли этого для защиты от CSRF? - PullRequest
10 голосов
/ 09 апреля 2010

ОБНОВЛЕНИЕ : GWT 2.3 представляет улучшенный механизм для борьбы с атаками XSRF. Смотри http://code.google.com/webtoolkit/doc/latest/DevGuideSecurityRpcXsrf.html

<Ч />

Механизм RPC GWT выполняет следующие действия для каждого HTTP-запроса -

  1. Устанавливает два пользовательских заголовка запроса - X-GWT-Permutation и X-GWT-Module-Base
  2. Устанавливает тип содержимого как text / x-gwt-rpc; кодировка = UTF-8

HTTP-запрос всегда является POST, и на стороне сервера методы GET выдают исключение (метод не поддерживается).

Кроме того, если эти заголовки не установлены или имеют неправильное значение, сервер не может обработать с исключением «возможно, CSRF?» или что-то в этом роде.

Вопрос: достаточно ли этого для предотвращения CSRF? Есть ли способ установить пользовательские заголовки и изменить тип содержимого в чисто мошенническом методе подделки запросов?

Ответы [ 4 ]

6 голосов
/ 09 апреля 2010

Если этот GWT RPC используется браузером, то он на 100% уязвим для CSRF. Тип содержимого может быть установлен в элементе html <form>. X-GWT-Permutation и X-GWT-Module-Base не находятся в черном списке Flash 100 * заблокированных заголовков . Таким образом, можно проводить атаку CSRF с использованием флэш. Единственный элемент заголовка, которому вы можете доверять для защиты CSRF - это «referer», но это не всегда лучший подход. По возможности используйте защиту на основе токенов CSRF.

Вот несколько написанных мною эксплойтов, которые должны пролить свет на неясную атаку, которую я описываю. Флэш-эксплойт для этого будет выглядеть примерно так: this и здесь - это эксплойт js / html, который меняет тип контента.

Мой эксплойт был написан для Flex 3.2, а правила изменились во Flex 4 (Flash 10). Вот последние правила , большинство заголовков можно манипулировать только для запросов POST.

Flash-скрипт, который использует navigateTo() для CSRF: https://github.com/TheRook/CSRF-Request-Builder

4 голосов
/ 07 сентября 2011

GWT 2.3 представляет улучшенный механизм для борьбы с атаками XSRF. См. GWT RPC XSRF защита

3 голосов
/ 11 апреля 2010

Я знаю, что задал этот вопрос, но после примерно одного дня исследований (благодаря указателям из Rook!), Я думаю, у меня есть ответ.

То, что GWT предоставляет из коробки, не защитит вас от CSRF. Вы должны предпринять шаги, описанные в Безопасность для приложений GWT , чтобы оставаться в безопасности.

GWT RPC устанавливает заголовок «content-type» в «text / x-gwt-rpc; charset = utf-8». Хотя я не нашел способа установить это с помощью HTML-форм, это легко сделать во флэш-памяти.

Пользовательские заголовки - X-GWT-Permutation и X-GWT-Module-Base - немного сложнее. Они не могут быть установлены с использованием HTML. Кроме того, они не могут быть установлены с помощью Flash, если ваш сервер специально не разрешит это в файле crossdomain.xml. См. Flash Player 10 Безопасность .

Кроме того, когда SWF-файл желает отправлять пользовательские заголовки HTTP куда угодно кроме своего собственного хозяина происхождения, там должен быть файл политики на HTTP-сервер, к которому относится запрос послан. Этот файл политики должен перечислить хост файла SWF Происхождение (или больший набор хостов) как разрешено отправлять пользовательский запрос заголовки этого хоста.

Теперь RPC GWT выпускается в двух вариантах. Существует старый RPC-формат пользовательской сериализации и новый de-RPC на основе JSON. AFAICT, код клиента всегда устанавливает эти заголовки запроса. RPC старого стиля теперь не применяет эти заголовки на стороне сервера, и поэтому возможна атака CSRF. Новый стиль de-RPC применяет эти заголовки, и, следовательно, может или не может быть возможно атаковать их.

В целом, я бы сказал, что если вы заботитесь о безопасности, убедитесь, что вы посылаете сильные токены CSRF в своем запросе, и не не полагается на GWT, чтобы предотвратить это для вас.

0 голосов
/ 10 апреля 2010

Я не уверен, есть ли простой способ (я бы тоже очень хотел это выяснить!), Но, по крайней мере, существуют некоторые продвинутые способы достижения произвольных межсайтовых запросов с произвольными заголовками: http://www.springerlink.com/content/h65wj72526715701/ Я не купил бумагу, но реферат и введение звучат очень интересно.

Может быть, кто-то здесь уже прочитал полную версию статьи, и может немного расширить?

...