File tree Expand file tree Collapse file tree 4 files changed +94
-0
lines changed
regression/end_to_end/command_injection Expand file tree Collapse file tree 4 files changed +94
-0
lines changed Original file line number Diff line number Diff line change 1+ <project name =" Main" basedir =" ." default =" compile" >
2+
3+ <property name =" root.dir" value =" ./" />
4+ <property name =" src.dir" value =" ${ root.dir } /src" />
5+ <property name =" classes.dir" value =" ${ root.dir } /build" />
6+
7+ <target name =" compile" >
8+ <antcall target =" clean" />
9+ <mkdir dir =" ${ classes.dir } " />
10+ <javac srcdir =" ${ src.dir } " destdir =" ${ classes.dir } " includeantruntime =" false" debug =" on" />
11+ </target >
12+
13+ <target name =" clean" >
14+ <delete dir =" ${ classes.dir } " />
15+ </target >
16+
17+ </project >
Original file line number Diff line number Diff line change 1+ {
2+ "namespace" : " com.diffblue.security" ,
3+ "rules" :
4+ [
5+ {
6+ "comment" : " Obtaining tainted string." ,
7+ "class" : " command_injection.Main" ,
8+ "method" : " make_tainted:(Ljava/lang/String;)Ljava/lang/String;" ,
9+ "result" : {
10+ "location" : " returns" ,
11+ "taint" : " command injection taint"
12+ }
13+ },
14+ {
15+ "comment" : " Executing a tainted string." ,
16+ "class" : " java.lang.Runtime" ,
17+ "method" : " exec:(Ljava/lang/String;)Ljava/lang/Process;" ,
18+ "sinkTarget" : {
19+ "location" : " arg1" ,
20+ "taint" : " command injection taint"
21+ },
22+ "message" : " A tainted string was executed."
23+ }
24+ ]
25+ }
26+
27+
Original file line number Diff line number Diff line change 1+ package command_injection ;
2+
3+ import java .io .IOException ;
4+ import java .util .List ;
5+
6+ public class Main {
7+
8+ private static String make_tainted (String s ) {
9+ return s ;
10+ }
11+
12+ private static void test_exec (String string_from_attacker ) {
13+ try {
14+ Process p = Runtime .getRuntime ().exec (string_from_attacker );
15+ }
16+ catch (IOException e ) {
17+ }
18+ }
19+
20+ public static void main (String [] args ) {
21+ if (args .length < 1 )
22+ return ;
23+
24+ String string_from_attacker = make_tainted (args [0 ]);
25+
26+ test_exec (string_from_attacker );
27+ }
28+ }
Original file line number Diff line number Diff line change 1+ import fasteners
2+ import os
3+ import subprocess
4+
5+ from regression .end_to_end .driver import run_security_analyser_pipeline
6+ import regression .utils as utils
7+
8+
9+ @fasteners .interprocess_locked (os .path .join (os .path .dirname (__file__ ), ".build_lock" ))
10+ def test_command_injection (load_strategy ):
11+ with utils .working_dir (os .path .abspath (os .path .dirname (__file__ ))):
12+ subprocess .check_call (["ant" ])
13+ with run_security_analyser_pipeline (
14+ "build" ,
15+ "rules.json" ,
16+ os .path .realpath (os .path .dirname (__file__ )),
17+ "command_injection.Main.main" ,
18+ load_strategy ,
19+ extra_args = ["--use-models-library" ]) as traces :
20+ assert traces .count_traces () == 1
21+ assert traces .trace_exists (
22+ "java::command_injection.Main.test_exec:(Ljava/lang/String;)V" , 14 )
You can’t perform that action at this time.
0 commit comments