Hi,

We actually had 2 problems to solve:

1. 8 tests don't pass on trunk.
2. Backport, the merge "worked" but we (at least) miss in RequestHandler.java 
the not backported WIP on REST with notably these missing methods:
     * RequestHandler::resolveURI (OFBIZ-10438)
     * UtilHttp::getRequestMethod "REST: adding segmented URI support", with 
also OFBIZ-11007 and OFBIZ-11332+OFBIZ-11007

With OFBIZ-11470 "Ensure that the SameSite attribute is set to 'strict' for all cookies" OFBiz is already protected from CSRF OOTB in all supported branches.

To makes things simple (at least for me) I have decided to not backport the CSRF Token work to current supported releases branches. And, as I have already expressed, to not use the CSRF Token defense OOTB in trunk. This solves the 2 problems above. This also avoids to backport some related Jiras like OFBIZ-11317 "Add 'controlPath' attribute to 'ofbizUrl' freemarker macro". It has also the advantage of simplifying committers work and demos.

If an user needs to use 'lax' for the SameSite attribute it would be her/his charge to make the backport. Easiest way is to revert the "REST" commits from trunk before backporting. Of course if a committer wants to backport the CSRF Token work with "REST" commits in, it's open, another Jira would be needed.

You may notice that this does not solve the tests issue in case someone wants to use the CSRF Token defense, it just hides it. So I'll create another Jira for that.

And last but not least I have created: OFBIZ-11585 "Update security.adoc with few 
words about our CSRF defense strategy"

Jacques

Le 04/04/2020 à 21:02, Jacques Le Roux a écrit :
Hi James,

The backports in R18 and R17 went well but for RequestHandler.java

We will need to do the merge by hand. I'll begin and let you know

Later...

Jacques

Le 04/04/2020 à 19:19, Jacques Le Roux a écrit :
Hi James, All,

Done, the CSRF defense is in trunk and I'll backport it ASAP (it has a CVE). 
But I need to check that's all is OK before.

There are more things to do anyway...

Jacques

Le 04/04/2020 à 17:48, James Yong a écrit :
Hi Jacques,

Can look at JWT enhancement later.

+1 for commit.

Regards,
James

On 2020/04/04 13:10:18, Jacques Le Roux <jacques.le.r...@les7arts.com> wrote:
Hi James,

  1. I like the idea. Maybe we could create the class but let the 
implementation (with explanations) for those who really need it?
  2. I did not mean there was a correlation between csrf-token check and auth 
check. My main idea is to avoid hardcoded things like

          if (requestUri.equals("main")) { return false;         } else {

We can set that in controllers using csrf-token="false", like it is for 
"logout". It's not difficult, just a global S/R. I thought there were other
cases but it seems not. so I now wonder if it's a good idea.

I don't think there is a need to systematise a default to csrf-token="false" when 
auth="false". I just want to work on OFBIZ-4956 and while doing so
check that if we change auth="false" to true, as it implies csrf-token="true", 
there will not be undesired side effects. And in other cases
(auth="false" must remain) we need to decide if should set the CSRF token check 
to false.

Anyway it does not hinder our work on CSRF, but I feel I now miss something 
that I wanted to say then, just an intuitive feeling, certainly nothing
serious

I think we are ready and I'll soon commit...

Jacques

Le 29/03/2020 à 03:28, James Yong a écrit :
Hi Jacques,

For 1, seems like a ICsrfDefenseStrategy class implementation issue. We can use another Jira for the enhancement / discussion when this JIRA (OFBIZ-11306) is completed.

For 2, csrf-token check is independent of auth check, and the current implementation should work as it is. So reviewing whether auth="false" be "true", should be in another JIRA (i.e. OFBIZ-4956). If there is a need for all auth="false" to default to csrf-token="false", we can implement another ICsrfDefenseStrategy class or modify the existing CsrfDefenseStrategy class.

Regards,
James

On 2020/03/27 18:16:58, Jacques Le Roux<jacques.le.r...@les7arts.com>  wrote:
Hi All,

Before I create a PR as a last opportunity to allow reviews and tests, I'd like 
to ask 2 last questions:

   1. should we not use a JWT rather than a (pseudo) random value for the CSRF token, this for timeout reason? Don't get me wrong I'm sure that the       random values generated by java.security.SecureRandom, as currently used, are safe enough. It's just that I wonder about the timeout. Should we care?    2. In relation with OFBIZ-4956, we need to check the remaining 195 cases where auth="false" and decide if we should change to "true", with the CSRF
      defense then used by default. In other cases (auth="false" must remain) 
we need to decide if should set the CSRF token check to false.

Apart that myhttps://github.com/JacquesLeRoux/ofbiz-framework/tree/POC-for-CSRF-Token-OFBIZ-11306 branch is ready to create a PR. We can't wait too
long about those 2 points, even if the 2nd needs a "bit" of work. Anyway, for 
now I'll wait answers, and hopefully help for OFBIZ-4956.

Thanks

Jacques


Le 26/03/2020 à 07:39, James Yong a écrit :
+1 with CSRF defense enabled in Demo
Hi,

I thought about that a bit more. I suggest to let the stable version (soon, 
R17) as is, ie with  CSRF defense enabled. This way users, mostly
interested in stable, would  see the real situation.

And to use the NoCsrfDefenseStrategy in trunk. So developers, often brought to use the trunk for development reasons, would have more latitude; as
they certainly will do locally.

If nobody disagree we will do so 
athttps://issues.apache.org/jira/browse/OFBIZ-11472 with Swapnil

If we do so, the linkhttps://demo-stable.ofbiz.apache.org/ordermgr/control/main?USERNAME=admin&PASSWORD=ofbiz&JavaScriptEnabled=Y will no longer work.

https://demo-stable.ofbiz.apache.org/ordermgr should be used and we need to 
updatehttps://ofbiz.apache.org/ofbiz-demos.html  for that.

Jacques


Reply via email to