[ 
https://issues.apache.org/jira/browse/WW-5407?focusedWorklogId=913815&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-913815
 ]

ASF GitHub Bot logged work on WW-5407:
--------------------------------------

                Author: ASF GitHub Bot
            Created on: 10/Apr/24 05:02
            Start Date: 10/Apr/24 05:02
    Worklog Time Spent: 10m 
      Work Description: jefferyxhy commented on code in PR #911:
URL: https://github.com/apache/struts/pull/911#discussion_r1558846553


##########
core/src/main/java/com/opensymphony/xwork2/util/ProxyUtil.java:
##########
@@ -96,12 +105,41 @@ public static boolean isProxyMember(Member member, Object 
object) {
             return flag;
         }
 
-        boolean isProxyMember = isSpringProxyMember(member);
+        boolean isProxyMember = isSpringProxyMember(member) || 
isHibernateProxyMember(member);
 
         isProxyMemberCache.put(member, isProxyMember);
         return isProxyMember;
     }
 
+    /**
+     * Check whether the given object is a Hibernate proxy.
+     *
+     * @param object the object to check
+     */
+    public static boolean isHibernateProxy(Object object) {
+        try {
+            return HibernateProxy.class.isAssignableFrom(object.getClass());
+        } catch (NoClassDefFoundError ignored) {
+            return false;
+        }
+    }
+
+    /**
+     * Check whether the given member is a member of a Hibernate proxy.
+     *
+     * @param member the member to check
+     */
+    public static boolean isHibernateProxyMember(Member member) {
+        try {
+            Class<?> clazz = 
ClassLoaderUtil.loadClass(HIBERNATE_HIBERNATEPROXY_CLASS_NAME, ProxyUtil.class);
+            if (hasMember(clazz, member))
+                return true;

Review Comment:
   @lukaszlenart updated. Thanks





Issue Time Tracking
-------------------

    Worklog Id:     (was: 913815)
    Time Spent: 1h 40m  (was: 1.5h)

> Extend SecurityMemberAccess proxy detection to Hibernate proxies
> ----------------------------------------------------------------
>
>                 Key: WW-5407
>                 URL: https://issues.apache.org/jira/browse/WW-5407
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Core
>            Reporter: Kusal Kithul-Godage
>            Priority: Minor
>             Fix For: 6.5.0
>
>          Time Spent: 1h 40m
>  Remaining Estimate: 0h
>
> The current option {{struts.disallowProxyMemberAccess}} does not have any 
> logic to detect Hibernate proxies which may also present a security risk.
> Additionally, the current option only forbids access to members which 
> originate from a proxy. However, it makes more sense to forbid access to 
> proxy objects entirely. This is because proxying is often used for sensitive 
> instances, application beans or Hibernate objects. None of which is safe to 
> be accessed or manipulated via OGNL. Thus, let's introduce an additional 
> option {{struts.disallowProxyObjectAccess}} which will offer stronger 
> protection.
> Finally, the caching mechanism in the ProxyUtil class uses an unbounded map, 
> this can potentially be attacked and lead to a memory leak or DoS. Let's 
> replace it with a Caffeine cache as we have done previously for the OGNL 
> expression cache.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to