Default Security Groups With Unrestricted Traffic

  • Query id: ea33fcf7-394b-4d11-a228-985c5d08f205
  • Query name: Default Security Groups With Unrestricted Traffic
  • Platform: CloudFormation
  • Severity: High
  • Category: Networking and Firewall
  • CWE: 200
  • Risk score: 7.5
  • URL: Github

Description

Check if default security group does not restrict all inbound and outbound traffic.
Documentation

Code samples

Code samples with security vulnerabilities

Positive test num. 1 - yaml file
Resources:
  InstanceSecurityGroup_ingress:  # inline ingress
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupName: default
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: 0.0.0.0/0

  InstanceSecurityGroup_egress: # inline egress
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupName: default
      GroupDescription: Enable SSH access via port 22
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: 0.0.0.0/0
Positive test num. 2 - yaml file
Resources:
  InstanceSecurityGroup_default: # ref
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupName: default
      GroupDescription: Enable SSH access via port 22

  InstanceSecurityGroupIngress:
    Type: 'AWS::EC2::SecurityGroupIngress'  # standalone ingress
    Properties:
      GroupId: !Ref InstanceSecurityGroup_default # ref
      IpProtocol: tcp
      FromPort: 22
      ToPort: 22
      CidrIp: 0.0.0.0/0

  InstanceSecurityGroupEgress:
    Type: 'AWS::EC2::SecurityGroupEgress' # standalone egress
    Properties:
      GroupId: !Ref InstanceSecurityGroup_default # ref
      IpProtocol: tcp
      FromPort: 22
      ToPort: 22
      CidrIp: 0.0.0.0/0
Positive test num. 3 - json file
{
  "Resources": {
    "InstanceSecurityGroup_ingress": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "default",
        "GroupDescription": "Enable SSH access via port 22",
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": "22",
            "ToPort": "22",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "InstanceSecurityGroup_egress": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "default",
        "GroupDescription": "Enable SSH access via port 22",
        "SecurityGroupEgress": [
          {
            "IpProtocol": "tcp",
            "FromPort": "22",
            "ToPort": "22",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    }
  }
}

Positive test num. 4 - json file
{
  "Resources": {
    "InstanceSecurityGroup_default": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "default",
        "GroupDescription": "Enable SSH access via port 22"
      }
    },
    "InstanceSecurityGroupIngress": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "Properties": {
        "GroupId": {
          "Ref": "InstanceSecurityGroup_default"
        },
        "IpProtocol": "tcp",
        "FromPort": 22,
        "ToPort": 22,
        "CidrIp": "0.0.0.0/0"
      }
    },
    "InstanceSecurityGroupEgress": {
      "Type": "AWS::EC2::SecurityGroupEgress",
      "Properties": {
        "GroupId": {
          "Ref": "InstanceSecurityGroup_default"
        },
        "IpProtocol": "tcp",
        "FromPort": 22,
        "ToPort": 22,
        "CidrIp": "0.0.0.0/0"
      }
    }
  }
}

Code samples without security vulnerabilities

Negative test num. 1 - yaml file
Resources:
  InstanceSecurityGroup:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupName: default
      GroupDescription: Enable SSH access via port 22
Negative test num. 2 - yaml file
Resources:
  InstanceSecurityGroup_not_named_default:  # def
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupName: not_default  # name is not "default"
      GroupDescription: Enable SSH access via port 22
      SecurityGroupIngress: # inline ingress
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: 0.0.0.0/0
      SecurityGroupEgress: # inline egress
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: 0.0.0.0/0

  InstanceSecurityGroupIngress:
    Type: 'AWS::EC2::SecurityGroupIngress'  # standalone ingress
    Properties:
      GroupId: !Ref InstanceSecurityGroup_not_named_default # def
      IpProtocol: tcp
      FromPort: 22
      ToPort: 22
      CidrIp: 0.0.0.0/0

  InstanceSecurityGroupEgress:
    Type: 'AWS::EC2::SecurityGroupEgress' # standalone egress
    Properties:
      GroupId: !Ref InstanceSecurityGroup_not_named_default # def
      IpProtocol: tcp
      FromPort: 22
      ToPort: 22
      CidrIp: 0.0.0.0/0
Negative test num. 3 - json file
{
  "Resources": {
    "InstanceSecurityGroup": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "default",
        "GroupDescription": "Enable SSH access via port 22"
      }
    }
  }
}

Negative test num. 4 - json file
{
  "Resources": {
    "InstanceSecurityGroup_not_named_default": {
      "Type": "AWS::EC2::SecurityGroup",
      "Properties": {
        "GroupName": "not_default",
        "GroupDescription": "Enable SSH access via port 22",
        "SecurityGroupIngress": [
          {
            "IpProtocol": "tcp",
            "FromPort": "22",
            "ToPort": "22",
            "CidrIp": "0.0.0.0/0"
          }
        ],
        "SecurityGroupEgress": [
          {
            "IpProtocol": "tcp",
            "FromPort": "22",
            "ToPort": "22",
            "CidrIp": "0.0.0.0/0"
          }
        ]
      }
    },
    "InstanceSecurityGroupIngress": {
      "Type": "AWS::EC2::SecurityGroupIngress",
      "Properties": {
        "GroupId": {
          "Ref": "InstanceSecurityGroup_not_named_default"
        },
        "IpProtocol": "tcp",
        "FromPort": 22,
        "ToPort": 22,
        "CidrIp": "0.0.0.0/0"
      }
    },
    "InstanceSecurityGroupEgress": {
      "Type": "AWS::EC2::SecurityGroupEgress",
      "Properties": {
        "GroupId": {
          "Ref": "InstanceSecurityGroup_not_named_default"
        },
        "IpProtocol": "tcp",
        "FromPort": 22,
        "ToPort": 22,
        "CidrIp": "0.0.0.0/0"
      }
    }
  }
}