azure-acr-anonymous-pull-internet

anonymousPullEnabled == true on a registry makes image pull accessible to any unauthenticated client from the internet.

derived azure emits ExposedToInternet

where

registry.anonymousPullEnabled == true registry SKU is Standard or Premium (Basic does not support anonymousPullEnabled)

emit

source typeContainerRegistry
target typeAnonymousIdentity
source<registry>
target<AnonymousIdentity>
state logicACTIVE when anonymousPullEnabled == true and publicNetworkAccess != Disabled. CONDITIONAL(network_reachability) when network rules limit ingress to specific CIDRs but anonymous pull is still enabled for those sources. BLOCKED when publicNetworkAccess == Disabled (private endpoint only) or a deny assignment covers the data-plane read action.

Narrative

Registry {source.name} has anonymousPullEnabled == true; any unauthenticated client can pull images by name without presenting any credential, from any internet location (subject to network rules). This exposes proprietary image content and configuration to public enumeration.

Raw rule rules/derived/azure/acr.yaml

id: azure-acr-anonymous-pull-internet
emits: ExposedToInternet
description: anonymousPullEnabled == true on a registry makes image pull accessible to any unauthenticated
  client from the internet.
where:
- registry.anonymousPullEnabled == true
- registry SKU is Standard or Premium (Basic does not support anonymousPullEnabled)
emit:
  source_type: ContainerRegistry
  target_type: AnonymousIdentity
  source: <registry>
  target: <AnonymousIdentity>
  permissions: []
  state_logic: ACTIVE when anonymousPullEnabled == true and publicNetworkAccess != Disabled. CONDITIONAL(network_reachability)
    when network rules limit ingress to specific CIDRs but anonymous pull is still enabled for those sources.
    BLOCKED when publicNetworkAccess == Disabled (private endpoint only) or a deny assignment covers the
    data-plane read action.
  confidence: 0.85
  derived_from:
  - 'registry property anonymousPullEnabled == true (evidence source: Microsoft.ContainerRegistry/registries/read)'
  false_positive_note: "Anonymous pull is read-only (no push, no delete, no list of all repos \u2014 only\
    \ known-name pulls). This is LOW escalation value on its own but HIGH recon value: any proprietary\
    \ image can be pulled without credentials. publicNetworkAccess: Disabled suppresses this even if the\
    \ flag is true. The confidence penalty (0.85) reflects that the flag may be set intentionally for\
    \ public images (a legitimate pattern). Flag for analyst review rather than treating as a defect by\
    \ default. Only Standard and Premium SKUs support this; do not emit for Basic registries."
  narrative: Registry {source.name} has anonymousPullEnabled == true; any unauthenticated client can pull
    images by name without presenting any credential, from any internet location (subject to network rules).
    This exposes proprietary image content and configuration to public enumeration.
move · open · esc close