11import swift
2+ private import codeql.swift.dataflow.DataFlow
23private import codeql.swift.dataflow.ExternalFlow
4+ private import codeql.swift.dataflow.FlowSteps
5+
6+ /** The struct `URL`. */
7+ class UrlDecl extends StructDecl {
8+ UrlDecl ( ) { this .getFullName ( ) = "URL" }
9+ }
10+
11+ /**
12+ * A content implying that, if a `URL` is tainted, then all its fields are tainted.
13+ */
14+ private class UriFieldsInheritTaint extends TaintInheritingContent , DataFlow:: Content:: FieldContent {
15+ UriFieldsInheritTaint ( ) { this .getField ( ) .getEnclosingDecl ( ) instanceof UrlDecl }
16+ }
317
418/**
519 * A model for `URL` members that are sources of remote flow.
@@ -22,53 +36,7 @@ private class UrlSummaries extends SummaryModelCsv {
2236 row =
2337 [
2438 ";URL;true;init(string:);(String);;Argument[0];ReturnValue;taint" ,
25- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0,1];ReturnValue;taint" ,
26- // The base string taints all the URL fields (except baseURL)
27- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[absoluteURL];taint" ,
28- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[fragment];taint" ,
29- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[host];taint" ,
30- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[lastPathComponent];taint" ,
31- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[path];taint" ,
32- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[pathComponents];taint" ,
33- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[pathExtension];taint" ,
34- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[port];taint" ,
35- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[query];taint" ,
36- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[relativePath];taint" ,
37- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[relativeString];taint" ,
38- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[scheme];taint" ,
39- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[standardized];taint" ,
40- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[standardizedFileURL];taint" ,
41- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[user];taint" ,
42- ";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[password];taint" ,
43- // The base string taints all the URL fields (except baseURL) if it's an absolute URL when relativeTo is used
44- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[absoluteURL];taint" ,
45- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[fragment];taint" ,
46- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[host];taint" ,
47- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[lastPathComponent];taint" ,
48- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[path];taint" ,
49- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[pathComponents];taint" ,
50- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[pathExtension];taint" ,
51- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[port];taint" ,
52- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[query];taint" ,
53- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[relativePath];taint" ,
54- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[relativeString];taint" ,
55- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[scheme];taint" ,
56- // Not mapping precise field taint to standardized/standardizedFileURL even if the return values are URLs too
57- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[standardized];taint" ,
58- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[standardizedFileURL];taint" ,
59- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[user];taint" ,
60- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[password];taint" ,
61- // The relativeTo URL taints fields not related to the path, query or fragment if the base string is a relative path
62- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[absoluteURL];taint" ,
63- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[baseURL];taint" ,
64- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[host];taint" ,
65- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[port];taint" ,
66- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[scheme];taint" ,
67- // Not mapping precise field taint to standardized/standardizedFileURL even if the return values are URLs too
68- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[standardized];taint" ,
69- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[standardizedFileURL];taint" ,
70- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[user];taint" ,
71- ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[password];taint" ,
39+ ";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0,1];ReturnValue;taint"
7240 ]
7341 }
7442}
0 commit comments