Skip to content

Commit 5c2cf79

Browse files
committed
[TEST] Java: CWE-020/ExternalAPI: new test based on qhelp
1 parent 1485d70 commit 5c2cf79

6 files changed

+50
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import javax.servlet.http.HttpServlet;
2+
import javax.servlet.http.HttpServletRequest;
3+
import javax.servlet.http.HttpServletResponse;
4+
import javax.servlet.ServletException;
5+
import java.io.IOException;
6+
7+
public class ExternalAPISinkExample extends HttpServlet {
8+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
9+
throws ServletException, IOException {
10+
// BAD: a request parameter is written directly to an error response page
11+
response.sendError(HttpServletResponse.SC_NOT_FOUND,
12+
"The page \"" + request.getParameter("page") + "\" was not found."); // $ Alert
13+
}
14+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import javax.servlet.http.HttpServlet;
2+
import javax.servlet.http.HttpServletRequest;
3+
import javax.servlet.http.HttpServletResponse;
4+
import javax.servlet.ServletException;
5+
import java.io.IOException;
6+
7+
public class ExternalAPITaintStepExample extends HttpServlet {
8+
protected void doGet(HttpServletRequest request, HttpServletResponse response)
9+
throws ServletException, IOException {
10+
11+
StringBuilder sqlQueryBuilder = new StringBuilder();
12+
sqlQueryBuilder.append("SELECT * FROM user WHERE user_id='");
13+
// BAD: a request parameter is concatenated directly into a SQL query
14+
sqlQueryBuilder.append(request.getParameter("user_id"));
15+
sqlQueryBuilder.append("'");
16+
17+
// ...
18+
}
19+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| javax.servlet.http.HttpServletResponse.sendError(int,java.lang.String) [param 1] | 1 | 1 |
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Security/CWE/CWE-020/ExternalAPIsUsedWithUntrustedData.ql
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#select
2+
| ExternalAPISinkExample.java:12:5:12:70 | ... + ... | ExternalAPISinkExample.java:12:21:12:48 | getParameter(...) : String | ExternalAPISinkExample.java:12:5:12:70 | ... + ... | Call to javax.servlet.http.HttpServletResponse.sendError with untrusted data from $@. | ExternalAPISinkExample.java:12:21:12:48 | getParameter(...) : String | getParameter(...) : String |
3+
edges
4+
| ExternalAPISinkExample.java:12:21:12:48 | getParameter(...) : String | ExternalAPISinkExample.java:12:5:12:70 | ... + ... | provenance | Src:MaD:2 Sink:MaD:1 |
5+
models
6+
| 1 | Sink: javax.servlet.http; HttpServletResponse; false; sendError; (int,String); ; Argument[1]; information-leak; manual |
7+
| 2 | Source: javax.servlet; ServletRequest; false; getParameter; (String); ; ReturnValue; remote; manual |
8+
nodes
9+
| ExternalAPISinkExample.java:12:5:12:70 | ... + ... | semmle.label | ... + ... |
10+
| ExternalAPISinkExample.java:12:21:12:48 | getParameter(...) : String | semmle.label | getParameter(...) : String |
11+
subpaths
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
query: Security/CWE/CWE-020/UntrustedDataToExternalAPI.ql
2+
postprocess:
3+
- utils/test/PrettyPrintModels.ql
4+
- utils/test/InlineExpectationsTestQuery.ql

0 commit comments

Comments
 (0)