Hi all,

Thanks for the feedback. 

Will start with CSRF Token implementation for POST request. 
Please see OFBIZ-11306 which has a patch for POC.

Hi Jacques,

Can explain the need for CSRF token with GET request?

Regards,
James
  
On 2019/11/27 09:47:04, Jacques Le Roux <jacques.le.r...@les7arts.com> wrote: 
> Hi James,
> 
> Thanks for your detailed analysis and proposition.
> 
> Le 26/11/2019 à 17:26, James Yong a écrit :
> > Hi Jacques, all,
> >
> > Haven't look into the POC yet. Please see the following updates:
> >
> > 1. Not a good practice to allow state-changing request via GET method 
> > without a token to check for CSRF.
> >
> > 2. Not a good practice to expose CSRF token in url. See [1]. Moreover, 
> > token in url may also be exposed via if user posts screenshots.
> >
> > 3. CSRF is not a concern for GET request if we avoid point 1 & 2.
> >
> > 4. In OFBiz, the same request handler generally can process both GET and 
> > POST requests. The checkSecureParameter in service events would check for 
> > no query string and as a result, state-changing operation is restricted to 
> > a POST method when service event was used.
> >
> > 5. Propose to revert the removal of checkSecureParameter, but add new code 
> > to allow exceptions to query-string check in service events. Exception can 
> > be made by setting a new attribute, allow-query-string-for-event = true | 
> > false (default), in security tag within request-map tag. Also extend 
> > checkSecureParameter to other event types.
> >
> > 6. Propose to add new attribute, csrfToken = true | false (default), to 
> > security tag to support anti-csrf for post request:
> >
> >      a) For forms: if true, will generate hidden token field value using 
> > CSRF Guard library ( see [3] ) for every rendered form and store this token 
> > inside session map variable. Support may be added for token name to be 
> > randomized.
> >
> >      b) For login form: There is a need to prevent Login CSRF. Token will 
> > also be created using pre-session. See [2] for Login CSRF.
> >                      
> >      c) For XMLHTTPRequest: Use default value for same-origin policy. 1 
> > token generated per user session for ajax call. Support may be added for 
> > token name to be randomized for each session.
> >
> > 7. The service.http.parameters.require.encrypted property that was removed, 
> > seems related to encrypting sensitive parameter values but wasn't 
> > implemented. May look into this at a later time.
> >
> > 8. For implementations that aren't using OFBiz screens, a property may be 
> > added to disable the check for CSRF token.
> The security team has already exchanged (since OFBIZ-10427 has been created) 
> about the CSRF situation and we don't want to handle specific cases. We 
> want to keep it as simple as possible.
> 
> We want to protect OFBiz globally from CSRF using a CSRF token based on the 
> sessionID (maybe enhanced) in ALL requests, including using a X-CSRF-Token 
> for XMLHttpRequests[1]
> 
> Nevertheless, we will consider your analysis when implementing our defence!
> 
> Jacques
> 
> >
> > Reference:
> > [1] 
> > https://danielmiessler.com/blog/sensitive-information-sent-in-the-url-over-https.
> > [2] 
> > https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html
> > [3] https://www.owasp.org/index.php?title=CSRF_Guard&redirect=no
> >
> > Regards,
> > James
> >
> > On 2019/11/10 10:22:05, Jacques Le Roux <jacques.le.r...@les7arts.com> 
> > wrote:
> >> Hi James,
> >>
> >> I see no reasons for you to not open a Jira and provide a patch, other 
> >> opinions may vary...
> >>
> >> Jacques
> >>
> >> Le 08/11/2019 à 17:46, James Yong a écrit :
> >>> Hi Jacques,
> >>>
> >>> Inline...
> >>>
> >>> On 2019/11/06 18:28:26, Jacques Le Roux <jacques.le.r...@les7arts.com> 
> >>> wrote:
> >>>> Hi James,
> >>>>
> >>>> Inline...
> >>>>
> >>>> Le 06/11/2019 à 17:53, James Yong a écrit :
> >>>>> Hi Jacques,
> >>>>>
> >>>>> Understand the intent of checkSecureParameter function is to avoid 
> >>>>> sensitive information
> >>>>> in the URL during POST method.
> >>>> Was ;) It does not exist anymore, in trunk at least, after OFBIZ-11260.
> >>> [James] Thanks for pointing it out. Still need to discuss the 
> >>> checkSecureParameter method below..
> >>>
> >>>>> A proposal is made to provide an attribute (i.e. 
> >>>>> allow-query-string-for-service-event) to allow url parameters / query 
> >>>>> string for certain request. Shouldn't the value for this attribute be 
> >>>>> false, instead of true, when no value is specified for the attribute?
> >>>> Depends, if we want to have the same behaviour than in trunk after 
> >>>> OFBIZ-11260 then it should be false by default. Note that we "never" get 
> >>>> back from
> >>>> changes, except in case of regression.
> >>> [James] I am ok with either way. The new attribute will be an interim 
> >>> solution if we were to remove the checkSecureParameter function after 
> >>> implementing CSRF protection.
> >>>
> >>>>> The property service.http.parameters.require.encrypted is also not 
> >>>>> required for the proposed change.
> >>>> Yes, re-introducing will need to revert work done with OFBIZ-11260
> >>>>
> >>> [James] From the comments inside the removed checkSecureParameter method, 
> >>> original intent of service.http.parameters.require.encrypted is to allow 
> >>> existing code to work after checkSecureParameter was implemented. Don't 
> >>> see a need to get this property back.
> >>>
> >>>>> As a side note, checkSecureParameter function restricts CSRF attack to 
> >>>>> a POST method but doesn't prevent CSRF entirely. Maybe can explore the 
> >>>>> feasibility of supporting CSRF token for OFBiz form in future..
> >>>> Yes, we already do: https://issues.apache.org/jira/browse/OFBIZ-10427
> >>> [James] Thanks for the info. CSRF protection needs to be implemented for 
> >>> OFBiz form since checkSecureParameter is already removed.
> >>>
> >>>> Jacques
> >>>>
> >>>>> Regards,
> >>>>> James
> >>>>>
> >>>>>
> >>>>>
> >>>>> On 2019/11/05 07:47:19, Jacques Le Roux <jacques.le.r...@les7arts.com> 
> >>>>> wrote:
> >>>>>> Hi James,
> >>>>>>
> >>>>>> We had service.http.parameters.require.encrypted in url.properties. 
> >>>>>> It's was the same but an all or nothing. It's now removed.
> >>>>>>
> >>>>>> I'm not against your late proposition. It now means to revert changes 
> >>>>>> from OFBIZ-11260!
> >>>>>>
> >>>>>> But then it should be reversed. By default 
> >>>>>> allow-query-string-for-service-event would be true and if someone 
> >>>>>> wants to prevent a query string for a
> >>>>>> particular event then false can be used.
> >>>>>>
> >>>>>> I'm not sure much people will care of that, not sure what others 
> >>>>>> think...
> >>>>>>
> >>>>>> Jacques
> >>>>>>
> >>>>>> Le 05/11/2019 à 01:28, James Yong a écrit :
> >>>>>>> Hi Jacques, Samuel, all,
> >>>>>>>
> >>>>>>> I think the security concerns raised are valid.
> >>>>>>>
> >>>>>>> However we can look into adding an attribute when the url parameter 
> >>>>>>> check isn’t required.
> >>>>>>> For example,
> >>>>>>> <request-map … >
>
> >>>>>>>       <security https="true" auth=“true” 
> >>>>>>> allow-query-string-for-service-event=“true”/>
>
> >>>>>>>       …
> >>>>>>>      
> >>>>>>> Regards,
> >>>>>>> James
> >>>>>>>
> >>>>>>> On 2019/10/31 14:20:11, Jacques Le Roux 
> >>>>>>> <jacques.le.r...@les7arts.com> wrote:
> >>>>>>>> Hi Samuel,
> >>>>>>>>
> >>>>>>>> You can go ahead. I became entangled with non ending issues while 
> >>>>>>>> working on this and this change will not change anything about those 
> >>>>>>>> unrelated issues.
> >>>>>>>>
> >>>>>>>> Jacques
> >>>>>>>>
> >>>>>>>> Le 30/10/2019 à 17:01, Jacques Le Roux a écrit :
> >>>>>>>>> Le 30/10/2019 à 15:34, Samuel a écrit :
> >>>>>>>>>> Hi Jacques,
> >>>>>>>>>>
> >>>>>>>>>> On 27/10/2019 17:42, Jacques Le Roux wrote:
> >>>>>>>>>>
> >>>>>>>>>>> … So I have no problem removing this method... and closing 
> >>>>>>>>>>> OFBIZ-2330, maybe after "fixing" OFBIZ-9804...
> >>>>>>>>>> I'm not sure to get your point with OFBIZ-9804, if we simply 
> >>>>>>>>>> remove `checkSecureParameter` we fix this issue, don't we ?
> >>>>>>>>>>
> >>>>>>>>>> Samuel
> >>>>>>>>>>
> >>>>>>>>> Yes, kinda. I prefer to have all calls to 
> >>>>>>>>> updateContactListPartyNoUserLogin similar. Please wait a bit before 
> >>>>>>>>> I close OFBIZ-9804...
> >>>>>>>>>
> >>>>>>>>> Jacques
> >>>>>>>>>
> >>>>>>>>>
> 

Reply via email to