I don't think I'm really asking for much here.   JEP411's plan will destroy our ability to manage user and service authorization in our existing software, at least cut us a little slack.  I wish we built our software on some other authorization API, unfortunately we didn't.

We're just trying to migrate as best we can to future versions of Java.

--
Regards,
Peter Firmstone

On 7/02/2023 12:53 pm, Peter Firmstone wrote:

Hello OpenJDK folk,

SecurityManager, AccessController and AccessControlContext will be removed in a future version of Java.

Just briefly: Our software is heavily dependant on Java's Authorization framework, we use ProtectionDomain's to represent remote services for authorization decisions.  We are working out how to implement a new authorization framework after SecurityManager's removal.

Many libraries call AccessController#doPrivileged methods, when these methods are removed, we're going to have a big problem with viral permissions.   Restricted authorization will become meaningless if it has to be granted to all domains on a call stack.

https://github.com/opensearch-project/OpenSearch/issues/1687

Retaining methods in the platform that developers can instrument will provide a common frame of reference for authorization decisions, that's runtime backward non-breaking, without burdening OpenJDK with maintenance.

I'm requesting retaining the DomainController interface, AccessController, AccessControlContext and Subject methods as no-op's for instrumentation?    Please leave them deprecated as no-op's, but not "deprecated for removal".

https://github.com/pfirmstone/HighPerformanceSecurity

Some thoughts:

 1. Ability to disable finalizers in Java 18 onwards is important to
    prevent finalizer attacks when instrumenting constructors to throw
    a RuntimeException.
 2. Guard#check methods can be no-op's for instrumentation.   If I can
    replace all instances of SecurityManager#checkPermission in
    OpenJDK with Guard#check, I can contribute the patches, this will
    assist greatly in the transition process of retaining existing
    hooks, while developing replacements.
 3. Reduce the size of the Java Platform's trusted computing base by
    giving all system ProtectionDomain's a CodeSource with a non-null
    meaningful URL.   Unfortunately Java Serialization is in the base
    module, so we cannot authorize it's use with a permission check,
    as the base module needs AllPermission, it has to be managed with
    serial filters
    
(https://dzone.com/articles/a-first-look-into-javas-new-serialization-filterin
    - perhaps someone will write a serialfilter generation tool that
    works similarly to our POLP policy generation tool?). Privileges
    cannot be elevated by an authenticated Subject, when all domains
    on the call stack are already privileged.  If Serialization was in
    a different ProtectionDomain, then we could prevent
    de-serialization for unauthenticated Subject's.   Perhaps OpenJDK
    might consider moving Serialization into a different module in
    future before it's eventual removal?
 4. Instrument all data parsing methods with guard checks, eg XML.  
    This allows authorization decisions to parse remote data based on
    the Principal's of the remotely authenticated Subject, to prevent
    injection attacks.
 5. We already have principle of least privilege policy generation
    tools and efficient policy checking tools for authorization in
    place.   These allow for simple policy file generation, auditing,
    editing and deployment.

--
Regards,
Peter Firmstone

Reply via email to