SPRING-SOURCE.RU

Spring MVC. Известные уязвимости и проблемы. Часть 1

Какая проблема существует?

В докладе Ounce описывается две проблемы, которые могут влиять на web приложение Spring. Обе проблемы происходят от использования Web MVC модуля Spring Framework, и они не делают какие-то баги или рушат дизайн в фреймворке. Первая проблема называется Data Submission to Non-Editable Fields (Отправка данных на не редактируемые поля). Эта проблема возникнуть из-за неправильной настройки DataBinder. Вторая проблема называется ModelView Injection (Инъекция ModelView). Эта проблема может возникнуть когда данные, приведенные в запросе клиента используются прямо как имя view.

На сколько серьезным может быть воздействие?

Проблема Data Submission to Non-Editable Fields может происходить, когда вы используете DataBinder для связывания данных запроса клиента с объектом модели на серверной стороне. По умолчанию, WebDataBinder будет пытаться связать все параметры предоставляемые HttpServletRequest. С включенным состоянием по умолчанию, вредоносный клиент может изменять или добавлять параметры к переданным данным формы. Для приложений, которые связывают данные запроса со слоем представления "form models", это вряд ли будет проблемой, так как связывание между form backing object и набором допустимых параметров запроса происходит один - к - одному. Эта проблема актуальна для приложений, которые привязываются напрямую к доменной модели, предоставляющей свойства, которые клиент не должен обновлять. Эта проблема может проявиться в любом месте, где используется Spring DataBinder для связки доменной модели, которая включает в себя SimpleFormController, MultiActionController, @Controller, и AbstractWizardFormController реализации.

Проблема под названием "ModelView инъекция" может произойти, когда данные в запросе клиента используются напрямую, как имя view для визуализации. Если имя view соотносится с внутренними ресурсами, например, с файлами в файловой системе web приложения, то вредоносный клиент может получить доступ к защищенным ресурсам web приложения, таким как web.xml.

Как решить данную проблему?

Для предотвращения проблемы Data Submission to Non-Editable Fields, DataBinder должен быть настроен с явным указанием полей, которые должны быть связаны. Чтобы сделать это, установите свойство "allowedFields" на каждом экземпляре DataBinder вашего приложения. Ниже представлен пример того, как это делается на примере "главных" реализаций контроллера:

Чтобы предотвратить ModelView инъекцию, просто никогда не позволяйте клиенту выбирать имя view. Имя view, это ответственность серверной части.

Как узнать, что эта проблема имеет место?

Посмотрите существующий контроллер, который связан с доменной моделью данных. Если вы не установили allowedFields свойство, то вы уязвимы для данного типа атак.