Skip to content

Commit 0e1e12b

Browse files
committed
Instrument methods on File that require read permissions
This commit adds instrumentation for File methods that require read permissions. see elastic#122109 for the write side
1 parent 9076ac4 commit 0e1e12b

File tree

5 files changed

+182
-0
lines changed

5 files changed

+182
-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;
@@ -510,6 +512,12 @@ public interface EntitlementChecker {
510512
//
511513

512514
// old io (ie File)
515+
void check$java_io_File$canExecute(Class<?> callerClass, File file);
516+
517+
void check$java_io_File$canRead(Class<?> callerClass, File file);
518+
519+
void check$java_io_File$canWrite(Class<?> callerClass, File file);
520+
513521
void check$java_io_File$createNewFile(Class<?> callerClass, File file);
514522

515523
void check$java_io_File$$createTempFile(Class<?> callerClass, String prefix, String suffix, File directory);
@@ -518,6 +526,28 @@ public interface EntitlementChecker {
518526

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

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

523553
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.InputStream;
1820
import java.io.PrintStream;
1921
import java.io.PrintWriter;
@@ -951,6 +953,21 @@ public void checkSelectorProviderInheritedChannel(Class<?> callerClass, Selector
951953

952954
// old io (ie File)
953955

956+
@Override
957+
public void check$java_io_File$canExecute(Class<?> callerClass, File file) {
958+
policyManager.checkFileRead(callerClass, file);
959+
}
960+
961+
@Override
962+
public void check$java_io_File$canRead(Class<?> callerClass, File file) {
963+
policyManager.checkFileRead(callerClass, file);
964+
}
965+
966+
@Override
967+
public void check$java_io_File$canWrite(Class<?> callerClass, File file) {
968+
policyManager.checkFileRead(callerClass, file);
969+
}
970+
954971
@Override
955972
public void check$java_io_File$createNewFile(Class<?> callerClass, File file) {
956973
policyManager.checkFileWrite(callerClass, file);
@@ -971,6 +988,61 @@ public void checkSelectorProviderInheritedChannel(Class<?> callerClass, Selector
971988
policyManager.checkFileWrite(callerClass, file);
972989
}
973990

991+
@Override
992+
public void check$java_io_File$exists(Class<?> callerClass, File file) {
993+
policyManager.checkFileRead(callerClass, file);
994+
}
995+
996+
@Override
997+
public void check$java_io_File$isDirectory(Class<?> callerClass, File file) {
998+
policyManager.checkFileRead(callerClass, file);
999+
}
1000+
1001+
@Override
1002+
public void check$java_io_File$isFile(Class<?> callerClass, File file) {
1003+
policyManager.checkFileRead(callerClass, file);
1004+
}
1005+
1006+
@Override
1007+
public void check$java_io_File$isHidden(Class<?> callerClass, File file) {
1008+
policyManager.checkFileRead(callerClass, file);
1009+
}
1010+
1011+
@Override
1012+
public void check$java_io_File$lastModified(Class<?> callerClass, File file) {
1013+
policyManager.checkFileRead(callerClass, file);
1014+
}
1015+
1016+
@Override
1017+
public void check$java_io_File$length(Class<?> callerClass, File file) {
1018+
policyManager.checkFileRead(callerClass, file);
1019+
}
1020+
1021+
@Override
1022+
public void check$java_io_File$list(Class<?> callerClass, File file) {
1023+
policyManager.checkFileRead(callerClass, file);
1024+
}
1025+
1026+
@Override
1027+
public void check$java_io_File$list(Class<?> callerClass, File file, FilenameFilter filter) {
1028+
policyManager.checkFileRead(callerClass, file);
1029+
}
1030+
1031+
@Override
1032+
public void check$java_io_File$listFiles(Class<?> callerClass, File file) {
1033+
policyManager.checkFileRead(callerClass, file);
1034+
}
1035+
1036+
@Override
1037+
public void check$java_io_File$listFiles(Class<?> callerClass, File file, FileFilter filter) {
1038+
policyManager.checkFileRead(callerClass, file);
1039+
}
1040+
1041+
@Override
1042+
public void check$java_io_File$listFiles(Class<?> callerClass, File file, FilenameFilter filter) {
1043+
policyManager.checkFileRead(callerClass, file);
1044+
}
1045+
9741046
@Override
9751047
public void check$java_io_File$mkdir(Class<?> callerClass, File file) {
9761048
policyManager.checkFileWrite(callerClass, file);

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: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ 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:

0 commit comments

Comments
 (0)