Authorization layer - threads and privileged calls

Peter Firmstone peter.firmstone at zeus.net.au
Sat Jul 17 07:40:54 UTC 2021


I've added the following method to the Authorization class:

/**
      * This method allows a developer to register the domain of a
      * dependency which doesn't utilize this Authorization layer, to be
      * considered as a trusted platform layer, in doing so however,
      * the dependency should be audited for vulnerabilities and 
instrumented
      * with guards if necessary.
      *
      * The intent of this method, is to allow guards to check the domains
      * on a thread call stack which hasn't originated from a privileged 
call,
      * the privileges of the domain are still checked, however it is 
preferable
      * for privileged calls to wrap and encapsulate dependency code if 
possible.
      * In the event that dependency code creates its own worker threads 
internally
      * which require privileges, this method allows those privileges to 
be checked,
      * rather than immediately rejected.
      *
      * However dependency code is unlikely to discriminate between 
calling code
      * and as such may allow other code to call it also, which may open
      * authorization security vulnerabilities.  In this case, the developer
      * may request the dependency code developers to add support, or 
may instrument the
      * dependency code with guard checks using the Attach API.
      * Alternatively a developer may wish to use module or ClassLoader 
visibility,
      * to isolate the dependency code.
      *
      * @param cl a class belonging to the privileged domain.
      */
     public static void registerPrivileged(Class cl){
         GUARD_PRIVILEGED_CHECK.checkGuard(cl);
         Authorization authorization = INHERITED_CONTEXT.get();
         try {
             INHERITED_CONTEXT.set(PRIVILEGED);
             PRIVILEGED_DOMAINS.add(cl.getProtectionDomain());
         } finally {
             INHERITED_CONTEXT.set(authorization);
         }
     }

On 16/07/2021 2:20 pm, Peter Firmstone wrote:
>
> I'm currently experimenting with a new authorization layer for java, 
> post JEP 411.
>
> I would like your thoughts around threads.
>
> This is intended to be simpler than Java's existing authorization 
> layer, support user Subjects and code based authorization.
>
> Concepts:
>
>  1. Application code has no privileges, unless a privileged call is
>     made (implements Callable), the privileges are only in force
>     during execution of the Callable and are not transferable to other
>     threads.
>  2. A Thread with a stack that only contains code visible to the
>     platform ClassLoader is considered privileged.
>  3. Privileged means it has defined privileges, it doesn't mean
>     AllPermission.
>
> Agents will be used to instrument the Java API for guard checks (would 
> be nice if OpenJDK can annotate these methods or do something to help 
> us identify these locations).
>
> Clearly, this will break a lot of existing code, many applications 
> simply won't run, because they don't utilise the API.  It would work 
> fine for new applications.
>
> In Java's existing authorization layer implementation (designed prior 
> to the introduction of Executor frameworks), a thread inherits the 
> stack context of the thread which created it, with executors, tasks 
> don't inherit the context of the thread which places the task.  The 
> new framework isn't able to capture the creating threads context, so 
> it makes more sense to treat anything outside a privileged call, or 
> system thread as unprivileged, it does however capture the caller when 
> creating a privileged task, this is a Task that has privileged access, 
> so it's important that it is not allowed to escape.
>
> I am thinking about allowing privileged domains, such that if a 
> library (which doesn't implement privileged calls), may be thought of 
> as a system domain, should it create threads, then provided those 
> threads only have privileged domains on the stack, guard checks may 
> proceed.   For unprivileged application code, all guard checks fail.
>
> Any thoughts or questions?
>
> -- 
> Regards,
>   
> Peter Firmstone
> 0498 286 363
> Zeus Project Services Pty Ltd.

-- 
Regards,
  
Peter Firmstone
0498 286 363
Zeus Project Services Pty Ltd.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/security-dev/attachments/20210717/f89c6ea4/attachment.htm>


More information about the security-dev mailing list