terraform.aws.security.aws-documentdb-storage-unencrypted.aws-documentdb-storage-unencrypted

profile photo of semgrepsemgrep
Author
unknown
Download Count*

The AWS DocumentDB cluster is unencrypted. The data could be read if the underlying disks are compromised. You should enable storage encryption.

Run Locally

Run in CI

Defintion

rules:
  - id: aws-documentdb-storage-unencrypted
    patterns:
      - pattern: |
          resource "aws_docdb_cluster" $ANYTHING {
            ...
          }
      - pattern-not-inside: |
          resource "aws_docdb_cluster" $ANYTHING {
            ...
            storage_encrypted = true
            ...
          }
    message: The AWS DocumentDB cluster is unencrypted. The data could be read if
      the underlying disks are compromised. You should enable storage
      encryption.
    languages:
      - hcl
    severity: WARNING
    metadata:
      category: security
      technology:
        - terraform
        - aws
      owasp:
        - A03:2017 - Sensitive Data Exposure
        - A04:2021 - Insecure Design
      cwe:
        - "CWE-311: Missing Encryption of Sensitive Data"
      references:
        - https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/docdb_cluster#storage_encrypted
        - https://owasp.org/Top10/A04_2021-Insecure_Design
      subcategory:
        - audit
      likelihood: LOW
      impact: HIGH
      confidence: LOW
      license: Commons Clause License Condition v1.0[LGPL-2.1-only]
      vulnerability_class:
        - Cryptographic Issues

Examples

aws-documentdb-storage-unencrypted.tf

# ok: aws-documentdb-storage-unencrypted
resource "aws_docdb_cluster" "pass" {
  cluster_identifier      = "my-docdb-cluster"
  engine                  = "docdb"
  master_username         = "foo"
  master_password         = "mustbeeightchars"
  backup_retention_period = 5
  preferred_backup_window = "07:00-09:00"
  skip_final_snapshot     = true
  storage_encrypted       = true
}

# ruleid: aws-documentdb-storage-unencrypted
resource "aws_docdb_cluster" "fail_1" {
  cluster_identifier      = "my-docdb-cluster"
  engine                  = "docdb"
  master_username         = "foo"
  master_password         = "mustbeeightchars"
  backup_retention_period = 5
  preferred_backup_window = "07:00-09:00"
  skip_final_snapshot     = true
}

# ruleid: aws-documentdb-storage-unencrypted
resource "aws_docdb_cluster" "fail_2" {
  cluster_identifier      = "my-docdb-cluster"
  engine                  = "docdb"
  master_username         = "foo"
  master_password         = "mustbeeightchars"
  backup_retention_period = 5
  preferred_backup_window = "07:00-09:00"
  skip_final_snapshot     = true
  storage_encrypted       = false
}