diff --git a/libs/entitlement/bridge/src/main/java/org/elasticsearch/entitlement/bridge/EntitlementChecker.java b/libs/entitlement/bridge/src/main/java/org/elasticsearch/entitlement/bridge/EntitlementChecker.java index 68da938c15e92..6457eacb14e9f 100644 --- a/libs/entitlement/bridge/src/main/java/org/elasticsearch/entitlement/bridge/EntitlementChecker.java +++ b/libs/entitlement/bridge/src/main/java/org/elasticsearch/entitlement/bridge/EntitlementChecker.java @@ -136,6 +136,10 @@ public interface EntitlementChecker { void check$java_net_URLClassLoader$(Class callerClass, String name, URL[] urls, ClassLoader parent, URLStreamHandlerFactory factory); + void check$java_net_URLClassLoader$$newInstance(Class callerClass, URL[] urls, ClassLoader parent); + + void check$java_net_URLClassLoader$$newInstance(Class callerClass, URL[] urls); + void check$java_security_SecureClassLoader$(Class callerClass); void check$java_security_SecureClassLoader$(Class callerClass, ClassLoader parent); diff --git a/libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/JvmActions.java b/libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/JvmActions.java index 8fa250c886572..78ffb93a4b9e9 100644 --- a/libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/JvmActions.java +++ b/libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/JvmActions.java @@ -72,6 +72,20 @@ static void createClassLoader() throws IOException { } } + @EntitlementTest(expectedAccess = PLUGINS) + static void createClassLoaderNewInstance1() throws IOException { + try (var classLoader = URLClassLoader.newInstance(new URL[0])) { + // intentionally empty, just let the loader close + } + } + + @EntitlementTest(expectedAccess = PLUGINS) + static void createClassLoaderNewInstance2() throws IOException { + try (var classLoader = URLClassLoader.newInstance(new URL[0], RestEntitlementsCheckAction.class.getClassLoader())) { + // intentionally empty, just let the loader close + } + } + @EntitlementTest(expectedAccess = ALWAYS_DENIED) static void createLogManager() { new java.util.logging.LogManager() { diff --git a/libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/ElasticsearchEntitlementChecker.java b/libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/ElasticsearchEntitlementChecker.java index a25e25253783b..29d4a3f4d0337 100644 --- a/libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/ElasticsearchEntitlementChecker.java +++ b/libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/ElasticsearchEntitlementChecker.java @@ -194,6 +194,16 @@ public ElasticsearchEntitlementChecker(PolicyChecker policyChecker) { policyChecker.checkCreateClassLoader(callerClass); } + @Override + public void check$java_net_URLClassLoader$$newInstance(Class callerClass, URL[] urls) { + policyChecker.checkCreateClassLoader(callerClass); + } + + @Override + public void check$java_net_URLClassLoader$$newInstance(Class callerClass, URL[] urls, ClassLoader parent) { + policyChecker.checkCreateClassLoader(callerClass); + } + @Override public void check$java_security_SecureClassLoader$(Class callerClass) { policyChecker.checkCreateClassLoader(callerClass);