1
- /** Definitiona for the Android Missing Certificate Pinning query. */
1
+ /** Definitions for the Android Missing Certificate Pinning query. */
2
2
3
3
import java
4
4
import semmle.code.xml.AndroidManifest
5
5
import semmle.code.java.dataflow.TaintTracking
6
6
import HttpsUrls
7
7
8
+ /** An Android Network Security Configuration XML file. */
8
9
class AndroidNetworkSecurityConfigFile extends XmlFile {
9
10
AndroidNetworkSecurityConfigFile ( ) {
10
11
exists ( AndroidApplicationXmlElement app , AndroidXmlAttribute confAttr , string confName |
@@ -16,8 +17,10 @@ class AndroidNetworkSecurityConfigFile extends XmlFile {
16
17
}
17
18
}
18
19
20
+ /** Holds if this database is of an Android application. */
19
21
predicate isAndroid ( ) { exists ( AndroidManifestXmlFile m ) }
20
22
23
+ /** Holds if the given domain name is trusted by the Network Security Configuration XML file. */
21
24
predicate trustedDomain ( string domainName ) {
22
25
exists (
23
26
AndroidNetworkSecurityConfigFile confFile , XmlElement domConf , XmlElement domain ,
@@ -33,6 +36,7 @@ predicate trustedDomain(string domainName) {
33
36
)
34
37
}
35
38
39
+ /** Configuration for finding uses of non trusted URLs. */
36
40
private class UntrustedUrlConfig extends TaintTracking:: Configuration {
37
41
UntrustedUrlConfig ( ) { this = "UntrustedUrlConfig" }
38
42
@@ -47,6 +51,7 @@ private class UntrustedUrlConfig extends TaintTracking::Configuration {
47
51
override predicate isSink ( DataFlow:: Node node ) { node instanceof UrlOpenSink }
48
52
}
49
53
54
+ /** Holds if `node` is a network communication call for which certificate pinning is not implemented. */
50
55
predicate missingPinning ( DataFlow:: Node node ) {
51
56
isAndroid ( ) and
52
57
node instanceof UrlOpenSink and
0 commit comments