mirror of
https://github.com/github/codeql.git
synced 2026-04-25 16:55:19 +02:00
Merge pull request #17025 from jcogs33/jcogs33/java/adjust-url-syntheticfield
Java: add TaintInheritingContent for URL synthetic fields
This commit is contained in:
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* Added flow through some methods of the class `java.net.URL` by ensuring that the fields of a URL are tainted.
|
||||
@@ -22,6 +22,7 @@ private module Frameworks {
|
||||
private import semmle.code.java.frameworks.IoJsonWebToken
|
||||
private import semmle.code.java.frameworks.jackson.JacksonSerializability
|
||||
private import semmle.code.java.frameworks.InputStream
|
||||
private import semmle.code.java.frameworks.Networking
|
||||
private import semmle.code.java.frameworks.Properties
|
||||
private import semmle.code.java.frameworks.Protobuf
|
||||
private import semmle.code.java.frameworks.ThreadLocal
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
*/
|
||||
|
||||
import semmle.code.java.Type
|
||||
private import semmle.code.java.dataflow.DataFlow
|
||||
private import semmle.code.java.dataflow.FlowSteps
|
||||
|
||||
/** The type `java.net.URLConnection`. */
|
||||
class TypeUrlConnection extends RefType {
|
||||
@@ -24,6 +26,11 @@ class TypeUrl extends RefType {
|
||||
TypeUrl() { this.hasQualifiedName("java.net", "URL") }
|
||||
}
|
||||
|
||||
/** Specifies that if a `URL` is tainted, then so are its synthetic fields. */
|
||||
private class UrlFieldsInheritTaint extends DataFlow::SyntheticFieldContent, TaintInheritingContent {
|
||||
UrlFieldsInheritTaint() { this.getField().matches("java.net.URL.%") }
|
||||
}
|
||||
|
||||
/** The type `java.net.URLDecoder`. */
|
||||
class TypeUrlDecoder extends RefType {
|
||||
TypeUrlDecoder() { this.hasQualifiedName("java.net", "URLDecoder") }
|
||||
|
||||
@@ -90,6 +90,14 @@ public class Test {
|
||||
out = in.toURL();
|
||||
sink(out); // $ hasTaintFlow
|
||||
}
|
||||
{
|
||||
// manual test for `URI.toURL().getPath()`; checks that if a `URL` is tainted, then so are its synthetic fields
|
||||
// java.net;URL;False;getPath;();;Argument[this].SyntheticField[java.net.URL.path];ReturnValue;taint;ai-manual
|
||||
URL out = null;
|
||||
URI in = (URI) source();
|
||||
out = in.toURL();
|
||||
sink(out.getPath()); // $ hasTaintFlow
|
||||
}
|
||||
{
|
||||
// "java.net;URL;false;URL;(String);;Argument[0];Argument[this];taint;manual"
|
||||
URL out = null;
|
||||
@@ -97,6 +105,14 @@ public class Test {
|
||||
out = new URL(in);
|
||||
sink(out); // $ hasTaintFlow
|
||||
}
|
||||
{
|
||||
// manual test for `URL(String).getPath()`; checks that if a `URL` is tainted, then so are its synthetic fields
|
||||
// java.net;URL;False;getPath;();;Argument[this].SyntheticField[java.net.URL.path];ReturnValue;taint;ai-manual
|
||||
URL out = null;
|
||||
String in = (String) source();
|
||||
out = new URL(in);
|
||||
sink(out.getPath()); // $ hasTaintFlow
|
||||
}
|
||||
{
|
||||
// "java.net;URL;false;URL;(URL,String);;Argument[0];Argument[this];taint;ai-generated"
|
||||
URL out = null;
|
||||
|
||||
Reference in New Issue
Block a user