File tree Expand file tree Collapse file tree 7 files changed +110
-0
lines changed
test/queries-tests/security/CWE-327/TlsDisabled Expand file tree Collapse file tree 7 files changed +110
-0
lines changed Original file line number Diff line number Diff line change @@ -12,6 +12,10 @@ abstract class PublicResource extends Resource {
12
12
}
13
13
14
14
module Cryptography {
15
+ abstract class TlsDisabled extends Resource {
16
+ abstract boolean isTlsDisabled ( ) ;
17
+ }
18
+
15
19
abstract class WeakTlsVersion extends Resource {
16
20
abstract StringLiteral getWeakTlsVersionProperty ( ) ;
17
21
Original file line number Diff line number Diff line change @@ -76,6 +76,18 @@ module Cache {
76
76
}
77
77
}
78
78
79
+ class RedisCacheTlsDisabled extends RedisCacheResource , Cryptography:: TlsDisabled {
80
+ override boolean isTlsDisabled ( ) {
81
+ exists ( boolean tlsPortDisabled | tlsPortDisabled = this .enableNonSslPort ( ) |
82
+ tlsPortDisabled = true and
83
+ result = false
84
+ or
85
+ tlsPortDisabled = false and
86
+ result = true
87
+ )
88
+ }
89
+ }
90
+
79
91
module CacheProperties {
80
92
/**
81
93
* Represents the properties object for a Redis cache resource.
Original file line number Diff line number Diff line change
1
+ # TLS Disabled
2
+
3
+ Disabling TLS (Transport Layer Security) exposes resources to unencrypted network traffic, making them vulnerable to interception and attacks. Always ensure TLS is enabled for all network-accessible resources.
4
+
5
+ ## Bad Example
6
+ The following Bicep resource has ` enableNonSslPort ` set to ` true ` , which disables TLS and allows unencrypted connections:
7
+
8
+ ``` bicep
9
+ resource redis 'Microsoft.Cache/Redis@2021-06-01' = {
10
+ name: 'myredis'
11
+ location: 'eastus'
12
+ properties: {
13
+ enableNonSslPort: true
14
+ publicNetworkAccess: 'Enabled'
15
+ }
16
+ }
17
+ ```
18
+
19
+ ## Good Example
20
+ The following Bicep resources either do not set ` enableNonSslPort ` (defaulting to secure) or explicitly set it to ` false ` , ensuring TLS is enforced:
21
+
22
+ ``` bicep
23
+ // TLS enforced by default (property not set)
24
+ resource redis1 'Microsoft.Cache/Redis@2021-06-01' = {
25
+ name: 'redis1'
26
+ location: 'eastus'
27
+ properties: {
28
+ publicNetworkAccess: 'Enabled'
29
+ }
30
+ }
31
+
32
+ // TLS explicitly enforced
33
+ resource redis2 'Microsoft.Cache/Redis@2021-06-01' = {
34
+ name: 'redis2'
35
+ location: 'eastus'
36
+ properties: {
37
+ enableNonSslPort: false
38
+ publicNetworkAccess: 'Enabled'
39
+ }
40
+ }
41
+ ```
42
+
43
+ ## Recommendation
44
+ Always leave ` enableNonSslPort ` unset or set it to ` false ` to ensure all connections are encrypted using TLS.
Original file line number Diff line number Diff line change
1
+ /**
2
+ * @name TLS Disabled
3
+ * @description Detects resources where TLS is disabled, which is insecure.
4
+ * @kind problem
5
+ * @problem.severity error
6
+ * @security-severity 8.5
7
+ * @precision high
8
+ * @id bicep/tls-disabled
9
+ * @tags security
10
+ * bicep
11
+ * azure
12
+ * cryptography
13
+ */
14
+ import bicep
15
+
16
+ from Cryptography:: TlsDisabled resource
17
+ where resource .isTlsDisabled ( ) = true
18
+ select resource , "TLS is disabled for this resource"
Original file line number Diff line number Diff line change
1
+ | app.bicep:12:1:19:1 | RedisCacheResource | TLS is disabled for this resource |
2
+ | app.bicep:22:1:29:1 | RedisCacheResource | TLS is disabled for this resource |
Original file line number Diff line number Diff line change
1
+ security/CWE-327/TlsDisabled.ql
Original file line number Diff line number Diff line change
1
+ // Bicep sample with TLS disabled for testing
2
+ // Case 1: enableNonSslPort not set (should be secure)
3
+ resource redis1 'Microsoft.Cache/Redis@2021-06-01' = {
4
+ name : 'redis1'
5
+ location : 'eastus'
6
+ properties : {
7
+ publicNetworkAccess : 'Enabled'
8
+ }
9
+ }
10
+
11
+ // Case 2: enableNonSslPort enabled (TLS disabled, should trigger)
12
+ resource redis2 'Microsoft.Cache/Redis@2021-06-01' = {
13
+ name : 'redis2'
14
+ location : 'eastus'
15
+ properties : {
16
+ enableNonSslPort : true
17
+ publicNetworkAccess : 'Enabled'
18
+ }
19
+ }
20
+
21
+ // Case 3: enableNonSslPort disabled (TLS enforced, should be secure)
22
+ resource redis3 'Microsoft.Cache/Redis@2021-06-01' = {
23
+ name : 'redis3'
24
+ location : 'eastus'
25
+ properties : {
26
+ enableNonSslPort : false
27
+ publicNetworkAccess : 'Enabled'
28
+ }
29
+ }
You can’t perform that action at this time.
0 commit comments