id: azure-nsg-http-unrestricted
info:
  name: Unrestricted TCP Port 80 Access in Azure NSGs
  author: princechaddha
  severity: high
  description: |
    Ensure that Microsoft Azure network security groups (NSGs) do not allow unrestricted access on TCP port 80 to protect against attackers using brute force methods to gain access to Azure virtual machines associated with these NSGs.
  impact: |
    Allowing unrestricted access on TCP port 80 can expose virtual machines to potential brute force attacks, increasing the risk of unauthorized access.
  remediation: |
    Modify NSG rules to restrict access on TCP port 80. Ensure that only known IPs are allowed, or implement additional authentication methods to protect against unauthorized access.
  reference:
    - https://docs.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview
  tags: cloud,devops,azure,microsoft,nsg,azure-cloud-config

flow: |
  code(1);
  for (let NsgData of iterate(template.nsgdata)) {
    NsgData = JSON.parse(NsgData)
    set("nsg", NsgData.name)
    set("resourcegroup", NsgData.resourceGroup)
    code(2)
  }

self-contained: true
code:
  - engine:
      - sh
      - bash
    source: |
      az network nsg list --query '[*].{name:name, resourceGroup:resourceGroup}' --output json

    extractors:
      - type: json
        name: nsgdata
        internal: true
        json:
          - '.[]'

  - engine:
      - sh
      - bash
    source: |
      az network nsg rule list --nsg-name $nsg --resource-group $resourcegroup --query "[?direction=='Inbound' && access=='Allow' && protocol=='TCP' && (destinationPortRange=='80')]"

    matchers:
      - type: word
        words:
          - '"sourceAddressPrefix": "*"'
          - '"sourceAddressPrefix": "internet"'
          - '"sourceAddressPrefix": "any"'

    extractors:
      - type: dsl
        dsl:
          - 'nsg + " has unrestricted access on TCP port 80"'
# digest: 4a0a00473045022100f53c22e343e487761805794f8693618416ed047189c159f690c73c2074818c080220286dd769b12a097661d32acba7157ae658e8893ede8d00ad4a477ebdb49a6b9f:922c64590222798bb761d5b6d8e72950