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

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

                Author: ASF GitHub Bot
            Created on: 09/Apr/24 04:41
            Start Date: 09/Apr/24 04:41
    Worklog Time Spent: 10m 
      Work Description: jefferyxhy opened a new pull request, #911:
URL: https://github.com/apache/struts/pull/911

   WW-5407 
   
   **Reason**
   Currently `SecurityMemberAccess#isAccessible` return true for a method of a 
proxy object, which expose the beans at risk of been changed. We need to have 
the ability to detect proxy object and reject the access if required.
   
    
    
   **Changes/ Solution**
   currently in  `isAccessible -> checkProxyMemberAccess` , it use 
`disallowProxyMemberAccess && ProxyUtil.isProxyMember(member, target)`  which 
is not enough, as `isProxyMember` only matches the member **directly** from 
proxy class, and does not match those ones **original** from the target class.
   
     
    
   So we update the `isAccessible`:
   * add one extra checking `checkProxyAccess` before `checkProxyMemberAccess` 
which is controlled by:
       * `struts.disallowProxyObjectAccess` : an new struts constant to enable 
or disable this checking (default as `false`)
       * if disallow, then we do the proxy checking against  the target object.
    
     
    
   **Result & Impact**
   * By default `struts.disallowProxyObjectAccess` as `default`, no difference.
   * Set `struts.disallowProxyObjectAccess`  as `true`, access to any member of 
a proxy object will be rejected, including both proxy member and original 
member of class. Which means whenever chained parameter `a.b.c.d.x` has one 
part that is a proxy, we reject the set to the last `x`
   




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

            Worklog Id:     (was: 913557)
    Remaining Estimate: 0h
            Time Spent: 10m

> 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: 10m
>  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