-
Notifications
You must be signed in to change notification settings - Fork 161
Description
Hi! I built an experimental class that triggers OS Command Injection sanitizer, similar to OsCommandInjectionRuntimeExec in the exemplar folder of jazzer.
I am trying to offline-instrument the sanitizers of jazzer to my class and then run the instrumented jar file to see if the OS Command Injection sanitizer can be successfully triggered.
Here is how I implemented my class:
import java.util.concurrent.TimeUnit;
import static java.lang.Runtime.getRuntime;
import java.nio.file.*;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
public class OsCommandInjectionRuntimeExec {
public static void main(String[] args) {
Path path = Paths.get("the path to an input file generated previously by jazzer");
try {
byte[] fileBytes = Files.readAllBytes(path);
System.out.println("File read successfully.");
String fileContent = new String(fileBytes, StandardCharsets.US_ASCII);
System.out.println("File content as ASCII string:");
System.out.println(fileContent);
Process process = getRuntime().exec(fileContent, new String[] {});
if (!process.waitFor(10, TimeUnit.MILLISECONDS)) {
process.destroyForcibly();
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception ignored) {
// Ignore execution and setup exceptions
}
}
}
Here is the script of how I tried to build the instrumented jar and run it:
mvn clean package
jazzer/jazzer --instrument_only=target/jazzer-jqf-test-1.0-SNAPSHOT.jar --dump_classes_dir=/tmp
java -cp jazzer-jqf-test-1.0-SNAPSHOT.instrumented.jar:$(find jazzer -name '*.jar' | tr '\n' ':') OsCommandInjectionRuntimeExec
These are the jar files in $(find jazzer -name '*.jar' | tr '\n' ':')
:
jazzer-0.22.1.jar jazzer-api-0.22.1.jar jazzer-junit-0.22.1.jar jazzer_standalone.jar
After I run my script, here is the error message:
Exception in thread "main" java.lang.NoClassDefFoundError: com/code_intelligence/jazzer/runtime/CoverageMap
at OsCommandInjectionRuntimeExec.main(OsCommandInjectionRuntimeExec.java:25)
Caused by: java.lang.ClassNotFoundException: com.code_intelligence.jazzer.runtime.CoverageMap
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 1 more
I am wondering why this class (com/code_intelligence/jazzer/runtime/CoverageMap
) is not included in jazzer-0.22.1.jar
. What will be the correct way to run offline-instrumented jar files?
Thanks!