Skip to content

Commit dd8b8c6

Browse files
committed
RANGER-5324: replace iterations with streams in RangerRequestScriptEvaluator - #2
1 parent d97fa29 commit dd8b8c6

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

agents-common/src/main/java/org/apache/ranger/plugin/policyengine/RangerRequestScriptEvaluator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ public final class RangerRequestScriptEvaluator {
160160
private static final String DEFAULT_RANGER_TAG_ATTRIBUTE_DATE_FORMAT = "yyyy/MM/dd";
161161
private static final String DEFAULT_ATLAS_TAG_ATTRIBUTE_DATE_FORMAT_NAME = "ATLAS_DATE_FORMAT";
162162
private static final String DEFAULT_ATLAS_TAG_ATTRIBUTE_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'";
163-
private static final String SCRIPT_SAFE_PREEXEC = "Object.defineProperty(this,'engine',{value:null,writable:false});exit=null;quit=null;";
163+
private static final String SCRIPT_SAFE_PREEXEC = "Object.defineProperty(this,'engine',{value:null,writable:false});Object.defineProperty(this,'context',{value:null,writable:false});Object.defineProperty(this,'__noSuchProperty__',{value:null,writable:false});Object.defineProperty(this,'loadWithNewGlobal',{value:null,writable:false});exit=null;quit=null;";
164164
private static final String SCRIPT_PREEXEC = SCRIPT_VAR__CTX + "=JSON.parse(" + SCRIPT_VAR__CTX_JSON + "); J=JSON.stringify;" +
165165
SCRIPT_VAR_REQ + "=" + SCRIPT_VAR__CTX + "." + SCRIPT_FIELD_REQUEST + ";" +
166166
SCRIPT_VAR_RES + "=" + SCRIPT_VAR_REQ + "." + SCRIPT_FIELD_RESOURCE + ";" +

agents-common/src/test/java/org/apache/ranger/plugin/conditionevaluator/RangerRequestScriptEvaluatorTest.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -431,23 +431,23 @@ public void testBlockJavaClassReferences() {
431431
RangerAccessRequest request = createRequest("test-user", Collections.emptySet(), Collections.emptySet(), Collections.emptyList());
432432
RangerRequestScriptEvaluator evaluator = new RangerRequestScriptEvaluator(request, scriptEngine, false);
433433

434-
Assert.assertNull("test: java.lang.System.out.println(\"test\");", evaluator.evaluateScript("java.lang.System.out.println(\"test\");"));
435-
Assert.assertNull("test: java.lang.Runtime.getRuntime().exec(\"bash\");", evaluator.evaluateScript("java.lang.Runtime.getRuntime().exec(\"bash\");"));
436-
437434
String fileName = "/tmp/ctest1-" + System.currentTimeMillis();
438-
String script = "var file = new java.io.File('" + fileName + "'); file.createNewFile()";
439435

440-
Assert.assertNull("test file access using: " + script, evaluator.evaluateScript(script));
436+
String[] scripts = new String[] {
437+
"java.lang.System.out.println(\"test\");",
438+
"java.lang.Runtime.getRuntime().exec(\"bash\");",
439+
"var newBindings=loadWithNewGlobal({'script':'this','name':'ctest'});this.context.setBindings(newBindings,100);var newEngine = this.__noSuchProperty__('engine');var e=newEngine.getFactory().getScriptEngine('-Dnashorn.args=--no-java=False');e.eval('java.lang.Runtime.getRuntime().exec(\"touch /tmp/ctest1\")')",
440+
"engine.eval('malicious code')",
441+
"var str = new java.lang.String('test'); str.length()",
442+
"var file = new java.io.File('" + fileName + "'); file.createNewFile()",
443+
};
444+
445+
for (String script : scripts) {
446+
Assert.assertNull("test: " + script, evaluator.evaluateScript(script));
447+
}
441448

442449
File testFile = new File(fileName);
443450
Assert.assertFalse(fileName + ": file should not have been created", testFile.exists());
444-
445-
script = "engine.eval('malicious code')";
446-
447-
Assert.assertNull("test engine access using: " + script, evaluator.evaluateScript(script));
448-
449-
script = "var str = new java.lang.String('test'); str.length()";
450-
Assert.assertNull("test Java String class access using: " + script, evaluator.evaluateScript(script));
451451
}
452452

453453
@Test

0 commit comments

Comments
 (0)