[
https://issues.apache.org/jira/browse/OFBIZ-12587?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17502812#comment-17502812
]
Jacques Le Roux edited comment on OFBIZ-12587 at 3/8/22, 9:16 AM:
------------------------------------------------------------------
New [^OFBIZ-12587-1.patch] , major changes are
* unique methods from getMethodsFromTransformsProperties and
getMethodsFromClasses
* Extracted new getMethodsFromClass from getMethodsFromTransformsProperties and
getMethodsFromClasses
TODO to adds:
* Servlet Attributes
* Request Attributes
* ... Actually checks context in renderTemplate()
was (Author: jacques.le.roux):
New patch, major changes are
* unique methods from getMethodsFromTransformsProperties and
getMethodsFromClasses
* Extracted new getMethodsFromClass from getMethodsFromTransformsProperties and
getMethodsFromClasses
TODO to adds:
* Servlet Attributes
* Request Attributes
* ... Actually checks context in renderTemplate()
> Implement Freemarker WhitelistMemberAccessPolicy
> ------------------------------------------------
>
> Key: OFBIZ-12587
> URL: https://issues.apache.org/jira/browse/OFBIZ-12587
> Project: OFBiz
> Issue Type: Improvement
> Components: ALL APPLICATIONS, ALL PLUGINS, framework/base,
> framework/security
> Affects Versions: Upcoming Branch
> Reporter: Jacques Le Roux
> Assignee: Jacques Le Roux
> Priority: Major
> Attachments: OFBIZ-12587-1.patch, OFBIZ-12587.patch
>
>
> In its API, Freemarker provides
> [WhitelistMemberAccessPolicy|https://freemarker.apache.org/docs/api/freemarker/ext/beans/WhitelistMemberAccessPolicy.html]
> where it mentions
> [TemplateAccessible|https://freemarker.apache.org/docs/api/freemarker/ext/beans/TemplateAccessible.html]
> and there says:
> bq. Note that adding something to the whitelist doesn't necessary make it
> visible from templates; see WhitelistMemberAccessPolicy documentation.
> So back to [WhitelistMemberAccessPolicy
> API|https://freemarker.apache.org/docs/api/freemarker/ext/beans/WhitelistMemberAccessPolicy.html]
> documentation says 2 things:
> bq. Of course, this only can deal with the ObjectWrapper aspect of safety;
> please check the Manual to see what else is needed.
> So far, I did not find any other documentation than the
> [WhitelistMemberAccessPolicy
> API|https://freemarker.apache.org/docs/api/freemarker/ext/beans/WhitelistMemberAccessPolicy.html]
> but the FAQ (see below). In the [WhitelistMemberAccessPolicy
> API|https://freemarker.apache.org/docs/api/freemarker/ext/beans/WhitelistMemberAccessPolicy.html]
> I read
> bq. Also, since this is related to security, read the documentation of
> MemberAccessPolicy, to know about the pitfalls and edge cases related to
> MemberAccessPolicy-es in general.
> So maybe I miss something somewhere.
> Something else is interesting in [WhitelistMemberAccessPolicy
> API|https://freemarker.apache.org/docs/api/freemarker/ext/beans/WhitelistMemberAccessPolicy.html]:
> bq. Note that if you add TemplateModel-s directly to the data-model, those
> are not wrapped by the ObjectWrapper (from Configurable.getObjectWrapper()),
> and so the MemberAccessPolicy won't affect those.
> So WhitelistMemberAccessPolicy is not a magic wand, more must be done. The
> [FAQ|https://freemarker.apache.org/docs/app_faq.html#faq_template_uploading_security]
> should be of some help. Notably in OFBiz case:
> bq. Always expect that templates may get some objects that you haven't put
> into the data-model yourself. Notably, templates can always get a Locale
> object with the .locale_object expression. Or the {color:#ff8b00}web
> application framework you are using may exposes some objects, like attributes
> from the Servlet scopes{color}. Such objects will be still wrapped with the
> ObjectWrapper that you set in the Configuration, and this is why it's
> important to ensure safety on that level. Controlling what objects the
> template will have access to is hard, but you can control centrally what
> members of any object they have access to.
> This also needs to taken in consideration:
> bq. Template-loader (Configuration.setTemplateLoader): Templates may load
> other templates by name (by path), like <#include "../secret.txt">. To avoid
> loading sensitive data, you have to use a TemplateLoader that double-checks
> that the file to load is something that should be exposed. FreeMarker tries
> to prevent the loading of files outside the template root directory
> regardless of template loader, but depending on the underlying storage
> mechanism, exploits may exist that FreeMarker can't consider (like, just as
> an example, ~ jumps to the current user's home directory). Note that
> freemarker.cache.FileTemplateLoader checks the canonical paths, so that's
> maybe a good candidate for this task, yet, adding a file extension check
> (file must be *.ftl) is maybe a good idea.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)