diff --git a/apps/showcase/src/main/resources/struts.xml b/apps/showcase/src/main/resources/struts.xml index 150b8e36d..d59a198cd 100644 --- a/apps/showcase/src/main/resources/struts.xml +++ b/apps/showcase/src/main/resources/struts.xml @@ -35,6 +35,18 @@ + + diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java index c7d941eeb..c4ddfbd24 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/SecurityMemberAccess.java @@ -58,6 +58,18 @@ public class SecurityMemberAccess implements MemberAccess { private static final Logger LOG = LogManager.getLogger(SecurityMemberAccess.class); + private static final Set ALLOWLIST_REQUIRED_PACKAGES = unmodifiableSet(new HashSet<>(Arrays.asList( + "org.apache.struts2.components", + "org.apache.struts2.views.jsp", + "com.opensymphony.xwork2.validator.validators" + ))); + + private static final Set> ALLOWLIST_REQUIRED_CLASSES = unmodifiableSet(new HashSet<>(Arrays.asList( + java.lang.Enum.class, + java.util.Date.class, + java.util.HashMap.class + ))); + private final ProviderAllowlist providerAllowlist; private final boolean allowStaticFieldAccess; private Set excludeProperties = emptySet(); @@ -204,7 +216,9 @@ public class SecurityMemberAccess implements MemberAccess { protected boolean isClassAllowlisted(Class clazz) { return allowlistClasses.contains(clazz) + || ALLOWLIST_REQUIRED_CLASSES.contains(clazz) || (providerAllowlist != null && providerAllowlist.getProviderAllowlist().contains(clazz)) + || isClassBelongsToPackages(clazz, ALLOWLIST_REQUIRED_PACKAGES) || isClassBelongsToPackages(clazz, allowlistPackageNames); } diff --git a/core/src/main/resources/struts-excluded-classes.xml b/core/src/main/resources/struts-excluded-classes.xml index 0d95f9c2c..f3f4f3f19 100644 --- a/core/src/main/resources/struts-excluded-classes.xml +++ b/core/src/main/resources/struts-excluded-classes.xml @@ -43,7 +43,8 @@ java.lang.System, java.lang.Thread, java.lang.ThreadGroup, - java.lang.ThreadLocal"/> + java.lang.ThreadLocal + "/> + java.lang.ThreadLocal + "/> @@ -98,7 +100,8 @@ org.wildfly.extension.undertow.deployment, org.yaml.snakeyaml, sun.misc, - sun.reflect"/> + sun.reflect + "/> + sun.reflect + "/>