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 {
1212}
1313
1414module Cryptography {
15+ abstract class TlsDisabled extends Resource {
16+ abstract boolean isTlsDisabled ( ) ;
17+ }
18+
1519 abstract class WeakTlsVersion extends Resource {
1620 abstract StringLiteral getWeakTlsVersionProperty ( ) ;
1721
Original file line number Diff line number Diff line change @@ -76,6 +76,18 @@ module Cache {
7676 }
7777 }
7878
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+
7991 module CacheProperties {
8092 /**
8193 * 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