Issue Details (XML | Word | Printable)

Key: WW-2107
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Blocker Blocker
Assignee: Don Brown
Reporter: Don Brown
Votes: 1
Watchers: 5
Operations

If you were logged in you would be able to see more operations.
Struts 2

Arbitrary user-submitted OGNL possible when using JSP EL or FreeMarker

Created: 13/Aug/07 07:47 AM   Updated: 01/Oct/07 03:27 PM
Return to search
Component/s: Plugin - Tags
Affects Version/s: 2.0.9
Fix Version/s: 2.0.10

Issue Links:
Reference
 

Flags: Important


 Description  « Hide
It is possible for a user to submit malicious OGNL that could be executed in a page that uses JSP EL expressions in Struts tag attributes. FreeMarker pages that use FreeMarker expressions in Struts tag attributes are also affected. Velocity pages are not affected.

For example, say you had this JSP page fragement:

<s:text name="foo" value="${bar}" />

And a user submitted, via a validation error or request url query parameter, the value:

bar=%{1+1}

What happens is the JSP processor gets the page first and processes the JSP EL expression resulting in:

<s:text name="foo" value="%{1+1}" />

Then, the Struts 2 tag receives the 'value' attribute value and processes the OGNL expression, resulting in this:

<input type="text" name="foo" value="2" />

The workaround is to ensure you don't use JSP EL or FreeMarker expressions in Struts tag attributes because you could be unwittingly allowing arbitrary code execution.

The proposed solution is to turn off, via the TLD, JSP EL expressions in all Struts tag attributes. This will mostly likely break many Struts 2 applications, but the severity of the issue needs to be taken into account. This solution doesn't unfortunately resolve the FreeMarker issue.

 All   Comments   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Repository Revision Date User Message
Struts #565258 Mon Aug 13 07:51:59 UTC 2007 mrdon Turning off JSP EL for all tag attributes, as all attributes are processed for OGNL
expressions
WW-2107
Files Changed
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/bean.html
MODIFY /struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/annotations/StrutsTagAttribute.java
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/component.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/date.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/iterator.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/doubleselect.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/radio.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/optgroup.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/token.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/hidden.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/actionerror.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/inputtransferselect.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/checkbox.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/subset.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/url.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/head.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/textfield.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/i18n.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/sort.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/combobox.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/optiontransferselect.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/append.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/push.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/updownselect.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/submit.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/elseif.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/a.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/fielderror.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/text.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/merge.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/label.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/generator.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/debug.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/form.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/actionmessage.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/div.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/checkboxlist.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/reset.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/param.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/if.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/select.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/file.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/password.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/include.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/textarea.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/action.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/property.html
MODIFY /struts/struts2/trunk/core/src/site/resources/tags/set.html

Repository Revision Date User Message
Struts #565259 Mon Aug 13 07:55:18 UTC 2007 mrdon Turning off JSP EL for all Struts 2 tag attributes, as they are all processed for OGNL
expressions
WW-2107
Files Changed
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/form.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/include.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/checkboxlist.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/set.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/if.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/select.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/file.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/password.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/textarea.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/main/java/org/apache/struts2/views/annotations/StrutsTagAttribute.java
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/component.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/radio.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/action.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/token.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/property.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/tabbedPanel.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/bean.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/iterator.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/actionerror.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/date.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/inputtransferselect.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/doubleselect.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/optgroup.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/url.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/hidden.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/table.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/textfield.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/datetimepicker.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/autocompleter.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/checkbox.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/subset.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/head.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/treenode.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/tree.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/i18n.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/sort.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/combobox.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/a.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/optiontransferselect.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/append.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/push.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/updownselect.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/else.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/submit.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/elseif.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/merge.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/label.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/generator.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/debug.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/fielderror.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/div.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/actionmessage.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/text.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/reset.html
MODIFY /struts/struts2/branches/STRUTS_2_0_X/core/src/site/resources/tags/param.html