Skip to content
Open
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"id": "c3655703-569b-42ec-8027-ef8835d989c0",
"queryName": "Beta - SQL DB Instance With Contained Database Authentication",
"severity": "HIGH",
"category": "Insecure Configurations",
"descriptionText": "In a 'google_sql_database_instance' resource based on SQLSERVER, the 'contained database authentication' flag should be set to 'off'",
"descriptionUrl": "https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/sql_database_instance.html#settings-1",
"platform": "Terraform",
"descriptionID": "c3655703",
"cloudProvider": "gcp",
"cwe": "286",
"riskScore": "6.0",
"experimental": "true"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package Cx

import data.generic.common as common_lib
import data.generic.terraform as tf_lib

CxPolicy[result] {
resource := input.document[i].resource.google_sql_database_instance[name]

contains(resource.database_version, "SQLSERVER")
results := get_results(resource, name)

result := {
"documentId": input.document[i].id,
"resourceType": "google_sql_database_instance",
"resourceName": tf_lib.get_resource_name(resource, name),
"searchKey": results.searchKey,
"issueType": "IncorrectValue",
"keyExpectedValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' should set 'contained database authentication' to 'off'", [name]),
"keyActualValue": sprintf("'google_sql_database_instance[%s].settings.database_flags' sets 'contained database authentication' to '%s'", [name, results.value]),
"searchLine": results.searchLine
}
}

get_results(resource, name) = results { # array
resource.settings.database_flags[x].name == "contained database authentication"
resource.settings.database_flags[x].value != "off"

results := {
"searchKey": sprintf("google_sql_database_instance[%s].settings.database_flags[%d].name", [name, x]),
"searchLine": common_lib.build_search_line(["resource", "google_sql_database_instance", name, "settings", "database_flags", x, "name"], []),
"value": resource.settings.database_flags[x].value
}
} else = results { # single object
resource.settings.database_flags.name == "contained database authentication"
resource.settings.database_flags.value != "off"

results := {
"searchKey": sprintf("google_sql_database_instance[%s].settings.database_flags.name", [name]),
"searchLine": common_lib.build_search_line(["resource", "google_sql_database_instance", name, "settings", "database_flags", "name"], []),
"value": resource.settings.database_flags.value
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
resource "google_sql_database_instance" "negative_1" {
name = "main-instance"
database_version = "MYSQL_8_0" # Is not a SQLSERVER instance
region = "us-central1"

settings {
tier = "db-f1-micro"

database_flags {
name = "contained database authentication"
value = "on"
}
}
}

resource "google_sql_database_instance" "negative_2" {
name = "sqlserver-instance-without-flag"
database_version = "SQLSERVER_2017_STANDARD"
region = "us-central1"

# Defaults to "off"
}

resource "google_sql_database_instance" "negative_3" {
name = "sqlserver-instance-without-flag"
database_version = "SQLSERVER_2017_STANDARD"
region = "us-central1"

settings {} # Defaults to "off"
}

resource "google_sql_database_instance" "negative_4" {
name = "sqlserver-instance-without-flag"
database_version = "SQLSERVER_2017_STANDARD"
region = "us-central1"

settings {
database_flags {
name = "sample_flag"
value = "off"
}
# Defaults to "off"
}
}

resource "google_sql_database_instance" "negative_5" {
name = "sqlserver-instance-with-flag"
database_version = "SQLSERVER_2019_STANDARD"
region = "us-central1"

settings {
tier = "db-f1-micro"

database_flags {
name = "sample_flag1"
value = "off"
}

database_flags { # Has flag set to "off" - array
name = "contained database authentication"
value = "off"
}

database_flags {
name = "sample_flag2"
value = "off"
}
}
}

resource "google_sql_database_instance" "negative_6" { # Single object support test
name = "sqlserver-instance-with-flag"
database_version = "SQLSERVER_2019_STANDARD"
region = "us-central1"

settings {
tier = "db-f1-micro"

database_flags {
name = "contained database authentication"
value = "off"
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
resource "google_sql_database_instance" "positive_1" {
name = "sqlserver-instance-with-flag"
database_version = "SQLSERVER_2017_EXPRESS"
region = "us-central1"

settings {
database_flags {
name = "sample_flag1"
value = "off"
}

database_flags { # Flag is not set to "off"
name = "contained database authentication"
value = "on"
}

database_flags {
name = "sample_flag2"
value = "off"
}
}
}

resource "google_sql_database_instance" "positive_2" { # Single object support test
name = "sqlserver-instance-with-flag"
database_version = "SQLSERVER_2017_EXPRESS"
region = "us-central1"

settings {
database_flags {
name = "contained database authentication"
value = "on"
} # Flag is not set to "off"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"queryName": "Beta - SQL DB Instance With Contained Database Authentication",
"severity": "HIGH",
"line": 13
},
{
"queryName": "Beta - SQL DB Instance With Contained Database Authentication",
"severity": "HIGH",
"line": 31
}
]
4 changes: 4 additions & 0 deletions assets/similarityID_transition/terraform_gcp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ similarityIDChangeList:
queryName: Beta - Google DNS Policy Logging Disabled
observations: ""
change: 2
- queryId: c3655703-569b-42ec-8027-ef8835d989c0
queryName: Beta - SQL DB Instance With Contained Database Authentication
observations: ""
change: 2
- queryId: 51a2c34d-dfd0-436f-aa34-e8f796e052fd
queryName: Beta - SQL DB Instance With Local Data Loading Enabled
observations: ""
Expand Down
Loading