Security Struts2 Freemarker XSS漏洞
在我的应用程序中,我们在freemarker模板中使用struts URL标记,如下所示:Security Struts2 Freemarker XSS漏洞,security,jakarta-ee,struts2,xss,freemarker,Security,Jakarta Ee,Struts2,Xss,Freemarker,在我的应用程序中,我们在freemarker模板中使用struts URL标记,如下所示: <s.url action="struts-action-name"/> <form action="<s.url action="struts-action-name"/>"> <form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d17
<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>">
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">
问题在于,不是将操作url附加到应用程序的根url,而是将其实际附加到当前url
假设我们点击了www.example.com/community/examples/xss187ba“>警报(1)506d1768713/career_development,在该页面的ftl中,我们有这样一个表单:
<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>">
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">
渲染的ftl将如下所示:
<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>">
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">
alert(1)506d1768713/职业发展“>
这会导致弹出警报。。。有人处理过这个问题吗?这是Struts中的一个bug还是我们在这里做错了什么
显而易见的修复方法是使用URL标记,如下所示:
<s.url action="struts-action-name"/>
<form action="<s.url action="struts-action-name"/>">
<form action="/community/examples/xss187ba"><ScRiPt>alert(1)</ScRiPt>506d1768713/career_development">
<form action="<s.url value="/struts-action-name.jspa"/>">
另一方面,快速搜索显示该标记在项目中使用了2500次,重构所有这些将不是一项非常有趣/高效的工作:(
如有任何帮助、意见或建议,将不胜感激
-Andre您可以扩展
org.apache.struts2.views.jsp.URLTag
并在struts tags.tld
中替换现有标签或添加新标签。您可以扩展org.apache.struts2.views.jsp.URLTag
并在struts tags.tld
中替换现有标签或添加新标签。我确实觉得它不自动运行很奇怪按语法url编码url的这些部分,这是我希望它能做的。
所以我会认为这是一个bug。也许联系Struts开发人员关于这一个。他们的大多数其他标签都是自动编码的,所以奇怪的是这个不是。 我觉得奇怪的是,它不自动URL编码URL的那些部分,因为这是我所期望的。
所以,我会认为这是一个bug。可能联系Struts开发人员关于这个问题。他们的大多数其他标签都是自动编码的,所以奇怪的是,这不是。 < P> >代码> URL< /Cult>标签没有“追加”到任何东西——它创建了一个相对于应用程序的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>
...
您可能需要提供更多信息:您是否正在使用特定插件(如约定)等?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>
...
您可能需要提供更多信息:您是否使用特定的插件(如约定)等