Уязвимость в Struts2 Freemarker XSS - PullRequest
       27

Уязвимость в Struts2 Freemarker XSS

1 голос
/ 08 октября 2011

В моем приложении мы используем URL-тег struts в наших шаблонах freemarker, например:

<s.url action="struts-action-name"/>

Проблема заключается в том, что вместо добавления URL-адреса действия к корневому URL-адресу приложения оно фактически добавляет его ктекущий URL.

Скажем, мы нажали www.example.com/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development, и в ftl для этой страницы у нас есть такая форма:

<form action="<s.url action="struts-action-name"/>"> 

Визуализированный ftl будет выглядеть так:

<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">

Что вызывает всплывающее предупреждение ... кто-нибудь имел дело с этой проблемой?Это ошибка в Struts или мы здесь что-то не так делаем?

Очевидное исправление заключается в использовании тега URL, например, такого:

<form action="<s.url value="/struts-action-name.jspa"/>">

С другой стороны, быстрый поиск показывает 2500использование этого тега в проекте и рефакторинг всех этих не будет очень забавной / эффективной работой: (* ​​1018 *

Любая помощь, комментарии или предложения будут высоко оценены.

-Andre

Ответы [ 3 ]

1 голос
/ 08 октября 2011

Тег url не «добавляется» ни к чему - он создает URL-адрес относительно приложения, в данном случае на основе настроенного имени действия. Если предположить действие с именем "f1" и корневое развертывание, единственное, что может произвести тег - это абсолютный URL /f1.action (или `/ f1 'без расширения).

Дано:

<struts>
  <constant name="struts.devMode" value="true"/>
  <constant name="struts.action.extension" value=",,action"/>

  <package name="default" namespace="/" extends="struts-default">
    <action name="f1" class="radios.RadioAction" method="input">
      <result name="input" type="freemarker">/WEB-INF/radios/input.ftl</result>
    </action>
...

Фрагмент FreeMarker:

<@s.url action="f1"/>

выведет:

/f1

Возможно, вам потребуется предоставить больше информации: используете ли вы определенные плагины (например, Convention) и т. Д.?

0 голосов
/ 08 октября 2011

Я нахожу странным, что он автоматически не кодирует эти части URL-адреса автоматически, как я и ожидал. Так что я бы посчитал это ошибкой. Возможно, свяжитесь с разработчиками Struts по этому поводу. Большинство других их тегов выполняют автоматическое кодирование, поэтому странно, что этот тег не делает.

0 голосов
/ 08 октября 2011

Вы можете расширить org.apache.struts2.views.jsp.URLTag и заменить выход или добавить новый тег в struts-tags.tld.

...