Skip to content

Commit 74ea974

Browse files
Jami CogswellJami Cogswell
Jami Cogswell
authored and
Jami Cogswell
committed
Java: initial tests
1 parent 180782d commit 74ea974

File tree

1 file changed

+48
-0
lines changed

1 file changed

+48
-0
lines changed

Diff for: java/ql/test/query-tests/security/CWE-022/semmle/tests/TaintedPath.java

+48
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.net.Socket;
77
import java.nio.file.Path;
88
import java.nio.file.Paths;
9+
import java.nio.file.FileSystems;
910

1011
public class TaintedPath {
1112
public void sendUserFile(Socket sock, String user) throws IOException {
@@ -86,4 +87,51 @@ public void sendUserFileGood4(Socket sock, String user) throws IOException {
8687
fileLine = fileReader.readLine();
8788
}
8889
}
90+
91+
// TODO : New tests
92+
93+
public void sendUserFileGood5(Socket sock, String user) throws IOException {
94+
BufferedReader filenameReader = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8"));
95+
// GOOD: remove all ".." sequences and path separators from the filename
96+
String filename = filenameReader.readLine().replaceAll("\\.", "").replaceAll("/", "");
97+
BufferedReader fileReader = new BufferedReader(new FileReader(filename)); // GOOD
98+
String fileLine = fileReader.readLine();
99+
while(fileLine != null) {
100+
sock.getOutputStream().write(fileLine.getBytes());
101+
fileLine = fileReader.readLine();
102+
}
103+
}
104+
105+
public void sendUserFileGood6(Socket sock, String user) throws IOException {
106+
BufferedReader filenameReader = new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8"));
107+
String filename = filenameReader.readLine();
108+
// GOOD: remove all ".." sequences and path separators from the filename
109+
filename = filename.replaceAll("\\.\\.|[/\\\\]", "");
110+
BufferedReader fileReader = new BufferedReader(new FileReader(filename)); // GOOD
111+
String fileLine = fileReader.readLine();
112+
while(fileLine != null) {
113+
sock.getOutputStream().write(fileLine.getBytes());
114+
fileLine = fileReader.readLine();
115+
}
116+
}
117+
118+
public void sendUserFileGood7(Socket sock, String user) throws Exception {
119+
BufferedReader filenameReader =
120+
new BufferedReader(new InputStreamReader(sock.getInputStream(), "UTF-8"));
121+
String filename = filenameReader.readLine();
122+
123+
// GOOD: ensure that that /, \ and .. cannot possibly be in the payload
124+
if (filename.matches("[0-9a-fA-F]{20,}")) {
125+
final Path pathObject = FileSystems.getDefault().getPath(filename); // summary now, see https://github.com/github/codeql/commit/19cb7adb6db17a3131b7db93482abc6a0d93ceff#diff-4b91db1bd2a19ab607f83fbe858f0ceffd942d1fb246739c731112367c865f88L8
126+
127+
BufferedReader fileReader = new BufferedReader(new FileReader(pathObject.toString())); // GOOD
128+
String fileLine = fileReader.readLine();
129+
while (fileLine != null) {
130+
sock.getOutputStream().write(fileLine.getBytes());
131+
fileLine = fileReader.readLine();
132+
}
133+
}
134+
135+
}
136+
89137
}

0 commit comments

Comments
 (0)