Skip to content

Commit 4754a11

Browse files
authored
Instrument methods on File that require read permissions (#122544) (#122787)
This commit adds instrumentation for File methods that require read permissions. see #122109 for the write side
1 parent b9900b8 commit 4754a11

File tree

6 files changed

+198
-0
lines changed

6 files changed

+198
-0
lines changed

libs/entitlement/bridge/src/main/java/org/elasticsearch/entitlement/bridge/EntitlementChecker.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
package org.elasticsearch.entitlement.bridge;
1111

1212
import java.io.File;
13+
import java.io.FileFilter;
14+
import java.io.FilenameFilter;
1315
import java.io.InputStream;
1416
import java.io.PrintStream;
1517
import java.io.PrintWriter;
@@ -512,6 +514,12 @@ public interface EntitlementChecker {
512514
//
513515

514516
// old io (ie File)
517+
void check$java_io_File$canExecute(Class<?> callerClass, File file);
518+
519+
void check$java_io_File$canRead(Class<?> callerClass, File file);
520+
521+
void check$java_io_File$canWrite(Class<?> callerClass, File file);
522+
515523
void check$java_io_File$createNewFile(Class<?> callerClass, File file);
516524

517525
void check$java_io_File$$createTempFile(Class<?> callerClass, String prefix, String suffix, File directory);
@@ -520,6 +528,28 @@ public interface EntitlementChecker {
520528

521529
void check$java_io_File$deleteOnExit(Class<?> callerClass, File file);
522530

531+
void check$java_io_File$exists(Class<?> callerClass, File file);
532+
533+
void check$java_io_File$isDirectory(Class<?> callerClass, File file);
534+
535+
void check$java_io_File$isFile(Class<?> callerClass, File file);
536+
537+
void check$java_io_File$isHidden(Class<?> callerClass, File file);
538+
539+
void check$java_io_File$lastModified(Class<?> callerClass, File file);
540+
541+
void check$java_io_File$length(Class<?> callerClass, File file);
542+
543+
void check$java_io_File$list(Class<?> callerClass, File file);
544+
545+
void check$java_io_File$list(Class<?> callerClass, File file, FilenameFilter filter);
546+
547+
void check$java_io_File$listFiles(Class<?> callerClass, File file);
548+
549+
void check$java_io_File$listFiles(Class<?> callerClass, File file, FileFilter filter);
550+
551+
void check$java_io_File$listFiles(Class<?> callerClass, File file, FilenameFilter filter);
552+
523553
void check$java_io_File$mkdir(Class<?> callerClass, File file);
524554

525555
void check$java_io_File$mkdirs(Class<?> callerClass, File file);

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

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,21 @@ static Path readWriteFile() {
4646
return testRootDir.resolve("read_write_file");
4747
}
4848

49+
@EntitlementTest(expectedAccess = PLUGINS)
50+
static void fileCanExecute() throws IOException {
51+
readFile().toFile().canExecute();
52+
}
53+
54+
@EntitlementTest(expectedAccess = PLUGINS)
55+
static void fileCanRead() throws IOException {
56+
readFile().toFile().canRead();
57+
}
58+
59+
@EntitlementTest(expectedAccess = PLUGINS)
60+
static void fileCanWrite() throws IOException {
61+
readFile().toFile().canWrite();
62+
}
63+
4964
@EntitlementTest(expectedAccess = PLUGINS)
5065
static void fileCreateNewFile() throws IOException {
5166
readWriteDir().resolve("new_file").toFile().createNewFile();
@@ -70,6 +85,61 @@ static void fileDeleteOnExit() throws IOException {
7085
toDelete.toFile().deleteOnExit();
7186
}
7287

88+
@EntitlementTest(expectedAccess = PLUGINS)
89+
static void fileExists() throws IOException {
90+
readFile().toFile().exists();
91+
}
92+
93+
@EntitlementTest(expectedAccess = PLUGINS)
94+
static void fileIsDirectory() throws IOException {
95+
readFile().toFile().isDirectory();
96+
}
97+
98+
@EntitlementTest(expectedAccess = PLUGINS)
99+
static void fileIsFile() throws IOException {
100+
readFile().toFile().isFile();
101+
}
102+
103+
@EntitlementTest(expectedAccess = PLUGINS)
104+
static void fileIsHidden() throws IOException {
105+
readFile().toFile().isHidden();
106+
}
107+
108+
@EntitlementTest(expectedAccess = PLUGINS)
109+
static void fileLastModified() throws IOException {
110+
readFile().toFile().lastModified();
111+
}
112+
113+
@EntitlementTest(expectedAccess = PLUGINS)
114+
static void fileLength() throws IOException {
115+
readFile().toFile().length();
116+
}
117+
118+
@EntitlementTest(expectedAccess = PLUGINS)
119+
static void fileList() throws IOException {
120+
readDir().toFile().list();
121+
}
122+
123+
@EntitlementTest(expectedAccess = PLUGINS)
124+
static void fileListWithFilter() throws IOException {
125+
readDir().toFile().list((dir, name) -> true);
126+
}
127+
128+
@EntitlementTest(expectedAccess = PLUGINS)
129+
static void fileListFiles() throws IOException {
130+
readDir().toFile().listFiles();
131+
}
132+
133+
@EntitlementTest(expectedAccess = PLUGINS)
134+
static void fileListFilesWithFileFilter() throws IOException {
135+
readDir().toFile().listFiles(pathname -> true);
136+
}
137+
138+
@EntitlementTest(expectedAccess = PLUGINS)
139+
static void fileListFilesWithFilenameFilter() throws IOException {
140+
readDir().toFile().listFiles((dir, name) -> true);
141+
}
142+
73143
@EntitlementTest(expectedAccess = PLUGINS)
74144
static void fileMkdir() throws IOException {
75145
Path mkdir = readWriteDir().resolve("mkdir");

libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/api/ElasticsearchEntitlementChecker.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
import org.elasticsearch.entitlement.runtime.policy.PolicyManager;
1515

1616
import java.io.File;
17+
import java.io.FileFilter;
18+
import java.io.FilenameFilter;
1719
import java.io.IOException;
1820
import java.io.InputStream;
1921
import java.io.PrintStream;
@@ -955,6 +957,21 @@ public void checkSelectorProviderInheritedChannel(Class<?> callerClass, Selector
955957

956958
// old io (ie File)
957959

960+
@Override
961+
public void check$java_io_File$canExecute(Class<?> callerClass, File file) {
962+
policyManager.checkFileRead(callerClass, file);
963+
}
964+
965+
@Override
966+
public void check$java_io_File$canRead(Class<?> callerClass, File file) {
967+
policyManager.checkFileRead(callerClass, file);
968+
}
969+
970+
@Override
971+
public void check$java_io_File$canWrite(Class<?> callerClass, File file) {
972+
policyManager.checkFileRead(callerClass, file);
973+
}
974+
958975
@Override
959976
public void check$java_io_File$createNewFile(Class<?> callerClass, File file) {
960977
policyManager.checkFileWrite(callerClass, file);
@@ -975,6 +992,61 @@ public void checkSelectorProviderInheritedChannel(Class<?> callerClass, Selector
975992
policyManager.checkFileWrite(callerClass, file);
976993
}
977994

995+
@Override
996+
public void check$java_io_File$exists(Class<?> callerClass, File file) {
997+
policyManager.checkFileRead(callerClass, file);
998+
}
999+
1000+
@Override
1001+
public void check$java_io_File$isDirectory(Class<?> callerClass, File file) {
1002+
policyManager.checkFileRead(callerClass, file);
1003+
}
1004+
1005+
@Override
1006+
public void check$java_io_File$isFile(Class<?> callerClass, File file) {
1007+
policyManager.checkFileRead(callerClass, file);
1008+
}
1009+
1010+
@Override
1011+
public void check$java_io_File$isHidden(Class<?> callerClass, File file) {
1012+
policyManager.checkFileRead(callerClass, file);
1013+
}
1014+
1015+
@Override
1016+
public void check$java_io_File$lastModified(Class<?> callerClass, File file) {
1017+
policyManager.checkFileRead(callerClass, file);
1018+
}
1019+
1020+
@Override
1021+
public void check$java_io_File$length(Class<?> callerClass, File file) {
1022+
policyManager.checkFileRead(callerClass, file);
1023+
}
1024+
1025+
@Override
1026+
public void check$java_io_File$list(Class<?> callerClass, File file) {
1027+
policyManager.checkFileRead(callerClass, file);
1028+
}
1029+
1030+
@Override
1031+
public void check$java_io_File$list(Class<?> callerClass, File file, FilenameFilter filter) {
1032+
policyManager.checkFileRead(callerClass, file);
1033+
}
1034+
1035+
@Override
1036+
public void check$java_io_File$listFiles(Class<?> callerClass, File file) {
1037+
policyManager.checkFileRead(callerClass, file);
1038+
}
1039+
1040+
@Override
1041+
public void check$java_io_File$listFiles(Class<?> callerClass, File file, FileFilter filter) {
1042+
policyManager.checkFileRead(callerClass, file);
1043+
}
1044+
1045+
@Override
1046+
public void check$java_io_File$listFiles(Class<?> callerClass, File file, FilenameFilter filter) {
1047+
policyManager.checkFileRead(callerClass, file);
1048+
}
1049+
9781050
@Override
9791051
public void check$java_io_File$mkdir(Class<?> callerClass, File file) {
9801052
policyManager.checkFileWrite(callerClass, file);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
io.netty.common:
22
- outbound_network
33
- manage_threads
4+
- files:
5+
- path: "/etc/os-release"
6+
mode: "read"
7+
- path: "/usr/lib/os-release"
8+
mode: "read"

modules/transport-netty4/src/main/plugin-metadata/entitlement-policy.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,8 @@ io.netty.common:
66
- inbound_network
77
- outbound_network
88
- manage_threads
9+
- files:
10+
- path: "/etc/os-release"
11+
mode: "read"
12+
- path: "/usr/lib/os-release"
13+
mode: "read"

x-pack/plugin/security/src/main/plugin-metadata/entitlement-policy.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,23 @@ io.netty.common:
88
- manage_threads
99
- inbound_network
1010
- outbound_network
11+
- files:
12+
- path: "/etc/os-release"
13+
mode: "read"
14+
- path: "/usr/lib/os-release"
15+
mode: "read"
1116
org.opensaml.xmlsec.impl:
1217
- write_system_properties:
1318
properties:
1419
- org.apache.xml.security.ignoreLineBreaks
20+
org.opensaml.saml.impl:
21+
- files:
22+
- relative_path: idp-docs-metadata.xml
23+
relative_to: config
24+
mode: read
25+
- relative_path: idp-metadata.xml
26+
relative_to: config
27+
mode: read
28+
- relative_path: saml-metadata.xml
29+
relative_to: config
30+
mode: read

0 commit comments

Comments
 (0)