mirror of
https://github.com/apache/struts.git
synced 2026-08-11 01:27:14 +00:00
Adds additional pattern to prevent access to getClass method
This commit is contained in:
committed by
Lukasz Lenart
parent
c0670209ba
commit
46f3cf24c4
+1
@@ -17,6 +17,7 @@ public class DefaultExcludedPatternsChecker implements ExcludedPatternsChecker {
|
||||
|
||||
public static final String[] EXCLUDED_PATTERNS = {
|
||||
"(^|\\%\\{)((#?)(top(\\.|\\['|\\[\")|\\[\\d\\]\\.)?)(dojo|struts|session|request|response|application|servlet(Request|Response|Context)|parameters|context|_memberAccess)(\\.|\\[).*",
|
||||
".*(^|\\.|\\[|\\'|\"|get)class(\\(\\.|\\[|\\'|\").*",
|
||||
"^(action|method):.*"
|
||||
};
|
||||
|
||||
|
||||
+6
-3
@@ -84,6 +84,7 @@ public class ParametersInterceptorTest extends XWorkTestCase {
|
||||
"java.lang.Boolean(false), #_memberAccess[\"allowStaticMethodAccess\"]= new java.lang.Boolean(true), " +
|
||||
"@java.lang.Runtime@getRuntime().exec('mkdir /tmp/PWNAGE'))(meh)");
|
||||
put("top['name'](0)", "true");
|
||||
put("expression", "#f=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#f.setAccessible(true),#f.set(#_memberAccess,true),#req=@org.apache.struts2.ServletActionContext@getRequest(),#resp=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#resp.println(#req.getRealPath('/')),#resp.close()");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -96,13 +97,15 @@ public class ParametersInterceptorTest extends XWorkTestCase {
|
||||
pi.setParameters(action, vs, HttpParameters.create(params).build());
|
||||
|
||||
// then
|
||||
assertEquals(2, action.getActionMessages().size());
|
||||
assertEquals(3, action.getActionMessages().size());
|
||||
|
||||
String msg1 = action.getActionMessage(0);
|
||||
String msg2 = action.getActionMessage(1);
|
||||
String msg3 = action.getActionMessage(2);
|
||||
|
||||
assertEquals("Error setting expression 'name' with value '(#context[\"xwork.MethodAccessor.denyMethodExecution\"]= new java.lang.Boolean(false), #_memberAccess[\"allowStaticMethodAccess\"]= new java.lang.Boolean(true), @java.lang.Runtime@getRuntime().exec('mkdir /tmp/PWNAGE'))(meh)'", msg1);
|
||||
assertEquals("Error setting expression 'top['name'](0)' with value 'true'", msg2);
|
||||
assertEquals("Error setting expression 'expression' with value '#f=#_memberAccess.getClass().getDeclaredField('allowStaticMethodAccess'),#f.setAccessible(true),#f.set(#_memberAccess,true),#req=@org.apache.struts2.ServletActionContext@getRequest(),#resp=@org.apache.struts2.ServletActionContext@getResponse().getWriter(),#resp.println(#req.getRealPath('/')),#resp.close()'", msg1);
|
||||
assertEquals("Error setting expression 'name' with value '(#context[\"xwork.MethodAccessor.denyMethodExecution\"]= new java.lang.Boolean(false), #_memberAccess[\"allowStaticMethodAccess\"]= new java.lang.Boolean(true), @java.lang.Runtime@getRuntime().exec('mkdir /tmp/PWNAGE'))(meh)'", msg2);
|
||||
assertEquals("Error setting expression 'top['name'](0)' with value 'true'", msg3);
|
||||
assertNull(action.getName());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user