diff --git a/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java b/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java
index 54e1a39769..8618e515c8 100644
--- a/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java
+++ b/application/src/test/java/org/thingsboard/server/service/script/TbelInvokeServiceTest.java
@@ -217,6 +217,90 @@ class TbelInvokeServiceTest extends AbstractTbelInvokeTest {
assertThat(compiledScriptsCache.getIfPresent(scriptIdToHash.get(scriptRemovedFromCache))).isNotNull();
}
+ @Test
+ void givenForbiddenSocketHandler_whenInvoking_thenThrowsRuntimeError() throws ExecutionException, InterruptedException {
+ UUID scriptId = evalScript("new java.util.logging.SocketHandler(\"127.0.0.1\", 9999)");
+ assertThatThrownBy(() -> invokeScript(scriptId, "{\"temperature\":25}"))
+ .isInstanceOf(ExecutionException.class)
+ .cause()
+ .isInstanceOf(TbScriptException.class)
+ .asInstanceOf(type(TbScriptException.class))
+ .satisfies(ex -> {
+ assertThat(ex.getErrorCode()).isEqualTo(TbScriptException.ErrorCode.RUNTIME);
+ assertThat(ex.getCause().getMessage()).contains("could not resolve class: java.util.logging.SocketHandler");
+ });
+ }
+
+ @Test
+ void givenForbiddenZipFile_whenInvoking_thenThrowsRuntimeError() throws ExecutionException, InterruptedException {
+ UUID scriptId = evalScript("new java.util.zip.ZipFile(\"/tmp/test.zip\")");
+ assertThatThrownBy(() -> invokeScript(scriptId, "{\"temperature\":25}"))
+ .isInstanceOf(ExecutionException.class)
+ .cause()
+ .isInstanceOf(TbScriptException.class)
+ .asInstanceOf(type(TbScriptException.class))
+ .satisfies(ex -> {
+ assertThat(ex.getErrorCode()).isEqualTo(TbScriptException.ErrorCode.RUNTIME);
+ assertThat(ex.getCause().getMessage()).contains("could not resolve class: java.util.zip.ZipFile");
+ });
+ }
+
+ @Test
+ void givenForbiddenFileHandler_whenInvoking_thenThrowsRuntimeError() throws ExecutionException, InterruptedException {
+ UUID scriptId = evalScript("new java.util.logging.FileHandler(\"/tmp/test.log\")");
+ assertThatThrownBy(() -> invokeScript(scriptId, "{\"temperature\":25}"))
+ .isInstanceOf(ExecutionException.class)
+ .cause()
+ .isInstanceOf(TbScriptException.class)
+ .asInstanceOf(type(TbScriptException.class))
+ .satisfies(ex -> {
+ assertThat(ex.getErrorCode()).isEqualTo(TbScriptException.ErrorCode.RUNTIME);
+ assertThat(ex.getCause().getMessage()).contains("could not resolve class: java.util.logging.FileHandler");
+ });
+ }
+
+ @Test
+ void givenForbiddenJarFile_whenInvoking_thenThrowsRuntimeError() throws ExecutionException, InterruptedException {
+ UUID scriptId = evalScript("new java.util.jar.JarFile(\"/tmp/test.jar\")");
+ assertThatThrownBy(() -> invokeScript(scriptId, "{\"temperature\":25}"))
+ .isInstanceOf(ExecutionException.class)
+ .cause()
+ .isInstanceOf(TbScriptException.class)
+ .asInstanceOf(type(TbScriptException.class))
+ .satisfies(ex -> {
+ assertThat(ex.getErrorCode()).isEqualTo(TbScriptException.ErrorCode.RUNTIME);
+ assertThat(ex.getCause().getMessage()).contains("could not resolve class: java.util.jar.JarFile");
+ });
+ }
+
+ @Test
+ void givenForbiddenPreferences_whenInvoking_thenThrowsRuntimeError() throws ExecutionException, InterruptedException {
+ UUID scriptId = evalScript("java.util.prefs.Preferences.userRoot()");
+ assertThatThrownBy(() -> invokeScript(scriptId, "{\"temperature\":25}"))
+ .isInstanceOf(ExecutionException.class)
+ .cause()
+ .isInstanceOf(TbScriptException.class)
+ .asInstanceOf(type(TbScriptException.class))
+ .satisfies(ex -> {
+ assertThat(ex.getErrorCode()).isEqualTo(TbScriptException.ErrorCode.RUNTIME);
+ assertThat(ex.getMessage()).contains("unresolvable property or identifier: java");
+ });
+ }
+
+ @Test
+ void givenForbiddenLocaleServiceProvider_whenInvoking_thenThrowsRuntimeError() throws ExecutionException, InterruptedException {
+ UUID scriptId = evalScript("new java.util.spi.LocaleServiceProvider()");
+ assertThatThrownBy(() -> invokeScript(scriptId, "{\"temperature\":25}"))
+ .isInstanceOf(ExecutionException.class)
+ .cause()
+ .isInstanceOf(TbScriptException.class)
+ .asInstanceOf(type(TbScriptException.class))
+ .satisfies(ex -> {
+ assertThat(ex.getErrorCode()).isEqualTo(TbScriptException.ErrorCode.RUNTIME);
+ assertThat(ex.getCause().getMessage()).contains("could not resolve class: java.util.spi.LocaleServiceProvider");
+ });
+ }
+
private void assertThatScriptIsBlocked(UUID scriptId) {
assertThatThrownBy(() -> {
invokeScriptResultString(scriptId, "{}");
diff --git a/pom.xml b/pom.xml
index 328c4782b3..c1725a3952 100755
--- a/pom.xml
+++ b/pom.xml
@@ -92,7 +92,7 @@
3.9.5
3.25.5
1.76.0
- 1.2.9
+ 1.2.10
1.18.46
1.2.5
1.2.5