azure-acr-anonymous-pull-internet
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> |
| 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. |
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.