Skip to content

Commit d844c6a

Browse files
authored
[Entitlements] Exclude java.desktop from system modules (#124563)
* exclude java.desktop from system modules * add IT test
1 parent c0efcd0 commit d844c6a

File tree

3 files changed

+20
-1
lines changed

3 files changed

+20
-1
lines changed

libs/entitlement/qa/entitlement-test-plugin/src/main/java/module-info.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,5 @@
1818
requires java.logging;
1919
requires java.net.http;
2020
requires jdk.net;
21+
requires java.desktop;
2122
}

libs/entitlement/qa/entitlement-test-plugin/src/main/java/org/elasticsearch/entitlement/qa/test/FileCheckActions.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import java.util.zip.ZipException;
3636
import java.util.zip.ZipFile;
3737

38+
import javax.imageio.stream.FileImageInputStream;
39+
3840
import static java.nio.charset.Charset.defaultCharset;
3941
import static java.nio.file.StandardOpenOption.CREATE;
4042
import static java.nio.file.StandardOpenOption.WRITE;
@@ -561,5 +563,13 @@ static void httpResponseBodySubscribersOfFile_FileOpenOptions_readOnly() {
561563
HttpResponse.BodySubscribers.ofFile(readFile(), CREATE, WRITE);
562564
}
563565

566+
@EntitlementTest(expectedAccess = ALWAYS_DENIED)
567+
static void javaDesktopFileAccess() throws Exception {
568+
// Test file access from a java.desktop class. We explicitly exclude that module from the "system modules", so we expect
569+
// any sensitive operation from java.desktop to fail.
570+
var file = EntitledActions.createTempFileForRead();
571+
new FileImageInputStream(file.toFile()).close();
572+
}
573+
564574
private FileCheckActions() {}
565575
}

libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/PolicyManager.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ public class PolicyManager {
6767

6868
static final Class<?> DEFAULT_FILESYSTEM_CLASS = PathUtils.getDefaultFileSystem().getClass();
6969

70+
static final Set<String> MODULES_EXCLUDED_FROM_SYSTEM_MODULES = Set.of("java.desktop");
71+
7072
/**
7173
* @param componentName the plugin name; or else one of the special component names
7274
* like {@link #SERVER_COMPONENT_NAME} or {@link #APM_AGENT_COMPONENT_NAME}.
@@ -141,7 +143,13 @@ private static Set<Module> findSystemModules() {
141143
// entitlements is a "system" module, we can do anything from it
142144
Stream.of(PolicyManager.class.getModule()),
143145
// anything in the boot layer is also part of the system
144-
ModuleLayer.boot().modules().stream().filter(m -> systemModulesDescriptors.contains(m.getDescriptor()))
146+
ModuleLayer.boot()
147+
.modules()
148+
.stream()
149+
.filter(
150+
m -> systemModulesDescriptors.contains(m.getDescriptor())
151+
&& MODULES_EXCLUDED_FROM_SYSTEM_MODULES.contains(m.getName()) == false
152+
)
145153
).collect(Collectors.toUnmodifiableSet());
146154
}
147155

0 commit comments

Comments
 (0)