-
Notifications
You must be signed in to change notification settings - Fork 0
Create AIfixtest.java #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,366 @@ | ||||||
| /** | ||||||
| * OWASP Benchmark v1.2 | ||||||
| * | ||||||
| * <p>This file is part of the Open Web Application Security Project (OWASP) Benchmark Project. For | ||||||
| * details, please see <a | ||||||
| * href="https://owasp.org/www-project-benchmark/">https://owasp.org/www-project-benchmark/</a>. | ||||||
| * | ||||||
| * <p>The OWASP Benchmark is free software: you can redistribute it and/or modify it under the terms | ||||||
| * of the GNU General Public License as published by the Free Software Foundation, version 2. | ||||||
| * | ||||||
| * <p>The OWASP Benchmark is distributed in the hope that it will be useful, but WITHOUT ANY | ||||||
| * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR | ||||||
| * PURPOSE. See the GNU General Public License for more details. | ||||||
| * | ||||||
| * @author Dave Wichers | ||||||
| * @created 2015 | ||||||
| */ | ||||||
| package org.owasp.benchmark.testcode; | ||||||
| | ||||||
| import java.io.IOException; | ||||||
| import javax.servlet.ServletException; | ||||||
| import javax.servlet.annotation.WebServlet; | ||||||
| import javax.servlet.http.HttpServlet; | ||||||
| import javax.servlet.http.HttpServletRequest; | ||||||
| import javax.servlet.http.HttpServletResponse; | ||||||
| | ||||||
| @WebServlet(value = "/cmdi-00/BenchmarkTest00006") | ||||||
| public class bad1 extends HttpServlet { | ||||||
| | ||||||
| private static final long serialVersionUID = 1L; | ||||||
| | ||||||
| @Override | ||||||
| public void doGet(HttpServletRequest request, HttpServletResponse response) | ||||||
| throws ServletException, IOException { | ||||||
| doPost(request, response); | ||||||
| } | ||||||
| | ||||||
| @Override | ||||||
| public void doPost(HttpServletRequest request, HttpServletResponse response) | ||||||
| throws ServletException, IOException { | ||||||
| // some code | ||||||
| response.setContentType("text/html;charset=UTF-8"); | ||||||
| | ||||||
| String param = ""; | ||||||
| if (request.getHeader("BenchmarkTest00006") != null) { | ||||||
| param = request.getHeader("BenchmarkTest00006"); | ||||||
| } | ||||||
| | ||||||
| // URL Decode the header value since req.getHeader() doesn't. Unlike req.getParameter(). | ||||||
| param = java.net.URLDecoder.decode(param, "UTF-8"); | ||||||
| | ||||||
| java.util.List<String> argList = new java.util.ArrayList<String>(); | ||||||
| | ||||||
| String osName = System.getProperty("os.name"); | ||||||
| if (osName.indexOf("Windows") != -1) { | ||||||
| argList.add("cmd.exe"); | ||||||
| argList.add("/c"); | ||||||
| } else { | ||||||
| argList.add("sh"); | ||||||
| argList.add("-c"); | ||||||
| } | ||||||
| // deepsemgrep-ruleid: tainted-cmd-from-http-request-deepsemgrep | ||||||
| argList.add("echo " + param); | ||||||
| | ||||||
| ProcessBuilder pb = new ProcessBuilder(); | ||||||
| | ||||||
| pb.command(argList); | ||||||
| | ||||||
| try { | ||||||
| Process p = pb.start(); | ||||||
| org.owasp.benchmark.helpers.Utils.printOSCommandResults(p, response); | ||||||
| } catch (IOException e) { | ||||||
| System.out.println( | ||||||
| "Problem executing cmdi - java.lang.ProcessBuilder(java.util.List) Test Case"); | ||||||
| throw new ServletException(e); | ||||||
| } | ||||||
| } | ||||||
| } | ||||||
| | ||||||
| @WebServlet(value = "/cmdi-00/BenchmarkTest00007") | ||||||
| public class bad2 extends HttpServlet { | ||||||
| | ||||||
| private static final long serialVersionUID = 1L; | ||||||
| | ||||||
| @Override | ||||||
| public void doGet(HttpServletRequest request, HttpServletResponse response) | ||||||
| throws ServletException, IOException { | ||||||
| doPost(request, response); | ||||||
| } | ||||||
| | ||||||
| @Override | ||||||
| public void doPost(HttpServletRequest request, HttpServletResponse response) | ||||||
| throws ServletException, IOException { | ||||||
| // some code | ||||||
| response.setContentType("text/html;charset=UTF-8"); | ||||||
| | ||||||
| String param = ""; | ||||||
| if (request.getHeader("BenchmarkTest00007") != null) { | ||||||
| param = request.getHeader("BenchmarkTest00007"); | ||||||
| } | ||||||
| | ||||||
| // URL Decode the header value since req.getHeader() doesn't. Unlike req.getParameter(). | ||||||
| param = java.net.URLDecoder.decode(param, "UTF-8"); | ||||||
| | ||||||
| String cmd = | ||||||
| org.owasp.benchmark.helpers.Utils.getInsecureOSCommandString( | ||||||
| this.getClass().getClassLoader()); | ||||||
| String[] args = {cmd}; | ||||||
| String[] argsEnv = {param}; | ||||||
| | ||||||
| Runtime r = Runtime.getRuntime(); | ||||||
| | ||||||
| try { | ||||||
| // ruleid: tainted-cmd-from-http-request-deepsemgrep | ||||||
| Process p = r.exec(args, argsEnv); | ||||||
|
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||||||
| param = request.getHeader("BenchmarkTest00007"); |
Step 4 - 6 AIfixtest.java#L103
Step 7 - 9 AIfixtest.java#L109
Step 10 - 11
java-testing-example/AIfixtest.java
Line 115 in 14aad55
| Process p = r.exec(args, argsEnv); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indirect Command Injection via User Controlled Environment
Unsanitized input from an HTTP header flows into exec, where it is used to build a shell command with environment variables. It is important to properly validate and sanitize all input parameters, to prevent potential command injection attacks via tainted environment variables.
Line 117 | CWE-78 | Priority score 215 | Learn more about this vulnerability
Data flow: 11 steps
Step 1 - 3
java-testing-example/AIfixtest.java
Line 99 in 14aad55
| param = request.getHeader("BenchmarkTest00007"); |
Step 4 - 6 AIfixtest.java#L103
Step 7 - 9 AIfixtest.java#L109
Step 10 - 11
java-testing-example/AIfixtest.java
Line 117 in 14aad55
| Runtime.getRuntime().exec(args, argsEnv); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sensitive Cookie Without 'HttpOnly' Flag
Cookie misses a call to setHttpOnly. Set the HttpOnly flag to true to protect the cookie from possible malicious code on client side.
Line 138 | CWE-1004 | Priority score 410
⚡ Fix this issue by replying with the following command: @snyk /fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@snyk /fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Indirect Command Injection via User Controlled Environment
Unsanitized input from cookies flows into exec, where it is used to build a shell command with environment variables. It is important to properly validate and sanitize all input parameters, to prevent potential command injection attacks via tainted environment variables.
Line 178 | CWE-78 | Priority score 215 | Learn more about this vulnerability
Data flow: 14 steps
Step 1 - 2
java-testing-example/AIfixtest.java
Line 154 in 14aad55
| javax.servlet.http.Cookie[] theCookies = request.getCookies(); |
Step 3 AIfixtest.java#L158
Step 4 - 7 AIfixtest.java#L160
Step 8 - 9 AIfixtest.java#L166
Step 10 - 12 AIfixtest.java#L172
Step 13 - 14
java-testing-example/AIfixtest.java
Line 178 in 14aad55
| Process p = r.exec(args, argsEnv); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sensitive Cookie Without 'HttpOnly' Flag
Cookie misses a call to setHttpOnly. Set the HttpOnly flag to true to protect the cookie from possible malicious code on client side.
Line 199 | CWE-1004 | Priority score 410
⚡ Fix this issue by replying with the following command: @snyk /fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@snyk /fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@snyk /fix
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Command Injection
Unsanitized input from cookies flows into java.lang.ProcessBuilder, where it is used as a shell command. This may result in a Command Injection vulnerability.
Line 261 | CWE-78 | Priority score 415 | Learn more about this vulnerability
Data flow: 14 steps
Step 1 - 2
java-testing-example/AIfixtest.java
Line 215 in 14aad55
| javax.servlet.http.Cookie[] theCookies = request.getCookies(); |
Step 3 AIfixtest.java#L219
Step 4 - 7 AIfixtest.java#L221
Step 8 - 9 AIfixtest.java#L234
Step 10 - 12 AIfixtest.java#L259
Step 13 - 14
java-testing-example/AIfixtest.java
Line 261 in 14aad55
| ProcessBuilder pb = new ProcessBuilder(argList); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Command Injection
Unsanitized input from an HTTP header flows into java.lang.ProcessBuilder, where it is used as a shell command. This may result in a Command Injection vulnerability.
Line 299 | CWE-78 | Priority score 415 | Learn more about this vulnerability
Data flow: 9 steps
Step 1 - 3
java-testing-example/AIfixtest.java
Line 293 in 14aad55
| param = request.getHeader("BenchmarkTest00006"); |
Step 4 - 6 AIfixtest.java#L297
Step 7 - 9
java-testing-example/AIfixtest.java
Line 299 in 14aad55
| ProcessBuilder pb = new ProcessBuilder("echo" + param); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Unsanitized input from
an HTTP headerflows intocommand, where it is used as a shell command. This may result in a Command Injection vulnerability.Line 67 | CWE-78 | Priority score 415 | Learn more about this vulnerability
Data flow: 11 steps
Step 1 - 3java-testing-example/AIfixtest.java
Line 46 in 14aad55
Step 4 - 6AIfixtest.java#L50Step 7 - 9AIfixtest.java#L63Step 10 - 11java-testing-example/AIfixtest.java
Line 67 in 14aad55